2011-08-10 71 views
11

我想在Windows XP上配置我的控制檯以支持UTF8並讓python檢測並使用它。使用控制檯在Windows XP上以UTF8格式打印python

到目前爲止,我的嘗試:

C:\Documents and Settings\Philippe>C:\Python25\python.exe 
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print u'é' 
é 
>>> import sys 
>>> sys.stdout.encoding 
'cp437' 
>>> quit() 

所以,在默認情況下,我在CP437和Python檢測就好了。

C:\Documents and Settings\Philippe>chcp 65001 
Active code page: 65001 

C:\Documents and Settings\Philippe>python 
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.stdout.encoding 
'cp65001' 
>>> print u'é' 
C:\Documents and Settings\Philippe> 

好像在UTF8印刷使得現在蟒蛇崩潰......

+0

是什麼讓你覺得你打印UTF8這裏擺在首位? –

+0

我剛剛更新了我的答案 - 這是在Python 3.3中添加的。 –

+0

另請參閱:http://stackoverflow.com/a/30505612/788700 – Adobe

回答

8

I would like to configure my console on Windows XP to support UTF8

我不認爲這會發生。

65001代碼頁是越野車;某些stdio調用行爲不正確,並且破壞了許多工具。雖然你可以cp65001爲手動編碼註冊:

def cp65001(name): 
    if name.lower()=='cp65001': 
     return codecs.lookup('utf-8') 

codecs.register(cp65001) 

,這可以讓你print u'some unicode string',它不會讓你在Unicode字符串寫入非ASCII字符。當您嘗試直接以字節字符串的形式編寫非ASCII的UTF-8序列時,您會得到相同的奇怪錯誤(IOError 0等)。

不幸的是UTF-8是Windows下的二等公民。 NT的Unicode模型是在UTF-8存在之前制定的,因此您希望在任何需要一致Unicode的地方使用每個代碼單元的雙字節編碼(UTF-16,最初是UCS-2)。像使用C的stdio編寫的許多便攜式應用程序和語言(如Python),使用字節字符串不適合該模型。

重寫Python以使用Windows Unicode控制檯調用(如WriteConsoleW)而不是便攜式C stdio控件調用並不適用於像管道和重定向到文件這樣的shell技巧。 (更不用說,您仍然必須從默認的終端字體更改爲TTF,然後才能看到所有可用的結果...)

最終如果您需要一個具有工作UTF-8支持的命令行基於stdio的應用程序,你可能最好使用替代Windows故意維護的控制檯,比如Cygwin,或者Python的IDLE或pywin32的PythonWin。

+0

好的,那我最好學習使用cp437,然後...... –

4

當我嘗試在Python 2.7版同樣的事情,我得到一個錯誤的import sys

LookupError: unknown encoding: cp65001

這意味着到我知道Python不知道如何使用特殊的Windows UTF-8代碼頁,而且2.5不太正確地處理了這種情況。

顯然,這是調查和固定在Python 3.2:http://bugs.python.org/issue6058

更新:What's New In Python 3.3它列出cp65001支持的新功能。

+0

不能,當'chcp 65001'也處於活動狀態時,Python 3.2會崩潰。這個特定的問題被視爲無效,而不是固定的。 –

+0

@Mark Tolonen,感謝您的更新。很顯然,我的閱讀理解技能需要改進。 –

0

我在使用Windows Vista的Python腳本中在cmd控制檯中顯示歐元符號時遇到了問題。以下是我的工作:

拳頭,我需要確保字體設置爲Lucinda Console而不是光柵字體哪些不起作用。這可以通過在控制檯窗口的下拉菜單中設置控制檯的默認屬性並使用cmd.exe重新啓動控制檯窗口來完成。

其次,當我運行cmd我設置代碼頁chcp 1252

第三,我確定我的編輯器(Notepad ++)有正確的編碼設置。在Notepad ++的Encoding下拉菜單中選擇Encode in UTF-8

這對我有用。

0

這一套在你的勝利:

set PYTHONIOENCODING=utf-8