2010-07-23 82 views
2

我在使用python命令行编码URL中的重音字符时遇到问题。减少我的问题的本质,这样的代码:使用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编码字符的方式,但我一直没有找到解决办法;如果你能帮助我,我将非常感激。提前致谢!

回答

2

Windows命令行在美国的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 
+0

作品就像一个魅力,谢谢! – 2011-09-02 02:40:20

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()解码(“LATIN1”)或的raw_input()解码,解码(“UTF-8 ')

输入编码取决于控制台的区域设置,我相信,因此它的系统特定。

编辑:unicode(str)也应该使用语言环境编码转换为unicode,以便可以是一个解决方案。