将十六进制字符串转换为Python中的百分号编码字符串
我有一个字符串,长得像这样: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