2010-07-23 66 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,以便可以是一個解決方案。