我在使用python命令行编码URL中的重音字符时遇到问题。将我的问题减少到必要的,这段代码:
>>> import urllib
>>> print urllib.urlencode({'foo' : raw_input('> ')})
> áéíóúñ
在mac命令行中打印:
foo=%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%B1
但是相同的代码在windows的命令行中打印出来:
foo=%A0%82%A1%A2%A3%A4
mac结果正确,字符根据需要进行编码;但是在Windows中我得到了一堆胡言乱语。
我猜测问题在于Windows编码字符的方式,但我找不到解决方案;如果你能帮助我,我将非常感激。提前谢谢!
答案 0 :(得分:3)
您可以使用显式编码来获得一致的结果。
>>> str = u"áéíóúñ"
>>> import urllib
>>> urllib.urlencode({'foo':str.encode('utf-8')})
'foo=%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%B1'
但是你需要先确保你的字符串是unicode,所以它可能需要解码,如果不是,比如raw_input()。decode('latin1')或raw_input()。decode('utf-8')
输入编码取决于控制台的语言环境,我相信,所以它是系统特定的。
编辑:unicode(str)也应该使用locale编码转换为unicode,这样就可以解决了。
答案 1 :(得分:2)