将十六进制字符串转换为Python中的百分号编码字符串

2 投票
6 回答
2357 浏览
提问于 2025-04-16 05:31

我有一个字符串,长得像这样:s = 'e6b693e6a0abe699ab'

我想在每一对字符前面加一个百分号,所以我希望得到的结果是:percentEncode(s) == '%e6%b6%93%e6%a0%ab%e6%99%ab'

有没有什么好的方法来写这个percentEncode(s)呢?

(顺便说一下,我不在乎那些不需要转换的字符是否被转换成ASCII。)

我能想到一些比较复杂的方法,但我想要一个简单明了的方式。虽然我对Python还比较陌生,但我觉得Python应该能很轻松地做到这一点。

6 个回答

2

如果你正在手动进行URL编码,可能会想看看这篇博客文章。里面讲解了如何使用标准库中的urllib模块的quote_plus函数来完成这项工作。

2

哦,你是说:

''.join(["%%%s" % pair for pair in [s[i:i+2] for i in range(0,len(s),2)]])

不过,如果你是为了处理网址中的特殊字符之类的事情,可能有个库里的函数更适合你的需求。

补充一下 -- 因为大家都喜欢可爱的 itertools 解决方案:

>>> from itertools import izip, cycle
>>> its = iter(s)
>>> tups = izip(cycle('%'), its, its)
>>> ''.join(''.join(t) for t in tups)
'%e6%b6%93%e6%a0%ab%e6%99%ab'
3
>>> ''.join( "%"+i+s[n+1] for n,i in enumerate(s)  if n%2==0 )
'%e6%b6%93%e6%a0%ab%e6%99%ab'
>>> import re
>>> re.sub("(..)","%\\1",s)
'%e6%b6%93%e6%a0%ab%e6%99%ab'

或者使用 re

撰写回答