2011-08-10 72 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