使用控制台获取python以在Windows XP上以UTF8打印

我想在Windows XP上configuration我的控制台,以支持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打印现在使python崩溃了…

Solutions Collecting From Web of "使用控制台获取python以在Windows XP上以UTF8打印"

我想在Windows XP上配置我的控制台来支持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之前,你可以看到所有的工作结果…)

最终,如果你需要一个支持基于stdio的应用程序的UTF-8支持的命令行,那么最好使用替代Windows控制台的方法,比如Cygwin,或者Python的IDLE或pywin32的PythonWin。

当我在Python 2.7上尝试同样的事情时,我得到一个import sys的错误:

LookupError:未知的编码:cp65001

这对我意味着Python不知道如何使用特殊的Windows UTF-8代码页,2.5处理不正常的情况。

显然这是调查,并没有解决在Python 3.2中: http : //bugs.python.org/issue6058

更新:在Python 3.3新增功能中,它将cp65001支持列为新功能。

我在使用Windows Vista的Python脚本中在cmd控制台中显示欧元符号时遇到了问题。 以下是对我有用的东西:

拳头,我需要确保字体设置为Lucinda Console而不是光栅字体不工作。 这可以通过在控制台窗口的下拉菜单中设置控制台的默认属性并使用cmd.exe重新启动控制台窗口来完成。

其次,当我运行cmd我设置代码页与chcp 1252

第三,我确定我的编辑器(Notepad ++)有正确的编码设置。 在Notepad ++的Encoding下拉菜单中,选择Encode in UTF-8

这对我有效。

设置在你的胜利:

 set PYTHONIOENCODING=utf-8