urllib.unquote_plus在同一个字符串上给出不同的输出

时间:2017-11-17 03:32:29

标签: python python-2.7 urllib urlencode python-unicode

我有点像一个蟒蛇菜鸟,并且在理解这里发生的事情时遇到了问题。我正在解码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需要是一个字符串类型?

1 个答案:

答案 0 :(得分:0)

  

任何人都可以帮助我理解为什么在得到我想要的string1之前dump®.txt需要成为字符串类型?

urllib不支持unicode,因为根据定义,url可以包含ASCII字符。如果您传递一个unicode对象,那么有一些crappy code in Python 2会尝试做正确的事情,并且它有问题。

将unicode对象传递给urllib.unquote是用户错误 - 请勿这样做。这是正确的:

print urllib.unquote_plus(string1.encode())