我有点像一个蟒蛇菜鸟,并且在理解这里发生的事情时遇到了问题。我正在解码URL编码的字符串。我有一个文件dump®.txt
(前面的空间是故意的)。当我更改对象类型时,我得到两个不同的结果:
>>> string1 = u'+dump%C2%AE.txt'
>>> print urllib.unquote_plus(string1)
dump®.txt
>>> string2 = '+dump%C2%AE.txt'
>>> print urllib.unquote_plus(string2)
dump®.txt
我原以为只会看到®
和string1
的{{1}}字符(或者甚至是相反的行为)。任何人都可以帮助我理解为什么在得到我想要的string2
之前string1
需要是一个字符串类型?
答案 0 :(得分:0)
任何人都可以帮助我理解为什么在得到我想要的
string1
之前dump®.txt
需要成为字符串类型?
urllib
不支持unicode,因为根据定义,url可以包含ASCII字符。如果您传递一个unicode对象,那么有一些crappy code in Python 2会尝试做正确的事情,并且它有问题。
将unicode对象传递给urllib.unquote
是用户错误 - 请勿这样做。这是正确的:
print urllib.unquote_plus(string1.encode())