使用Python编码重音字符的问题
我在用Python命令行处理带重音符号的字符时遇到了问题。把我的问题简化一下,这段代码:
>>> 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对字符的编码方式上,但我找不到解决办法;如果你能帮我,我会非常感激。提前谢谢你!
2 个回答
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)也应该使用地区编码来转换成unicode,这样可能也是一个解决办法。
2
在美国的Windows系统中,命令行使用的是cp437这种编码方式。但是你需要使用utf-8编码:
>>> import sys
>>> sys.stdin.encoding
'cp437'
>>> print urllib.urlencode({'foo':raw_input('> ').decode('cp437').encode('utf8')})
> áéíóúñ
foo=%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%B1