如何在Windows控制台中显示utf-8

我在Windows 7上使用Python 2.6

我从这里借用了一些代码: Python,Unicode和Windows控制台

我的目标是能够在Windows控制台中显示uft-8string。

在python 2.6中进行了可怕的修改

sys.setdefaultencoding函数()

不再支持

不过,在我尝试使用它之前,我写了reload(sys),它神奇地没有错误。

此代码不会出错,但会显示有趣的字符而不是日文文本。 我相信问题是因为我没有成功改变Windows控制台的代码页。

这些是我的尝试,但他们不工作:

reload(sys) sys.setdefaultencoding('utf-8') print os.popen('chcp 65001').read() sys.stdout.encoding = 'cp65001' 

也许你可以使用win32console来改变代码页? 我试过从我链接的网站的代码,但它也从win32console错误..也许代码是过时的。

这是我的代码,这不是错误,但打印有趣的字符:

 #coding=<utf8> import os import sys import codecs reload(sys) sys.setdefaultencoding('utf-8') sys.stdout = codecs.getwriter('utf8')(sys.stdout) sys.stderr = codecs.getwriter('utf8')(sys.stderr) #print os.popen('chcp 65001').read() print(sys.stdout.encoding) sys.stdout.encoding = 'cp65001' print(sys.stdout.encoding) x = raw_input('press enter to continue') a = 'こんにちは世界'#.decode('utf8') print a x = raw_input() 

我知道你说你使用的是Python 2.6,但是如果你能够使用Python 3.3,你会发现它最终被支持。

在启动Python之前使用命令chcp 65001

请参阅http://docs.python.org/dev/whatsnew/3.3.html#codecs

永远不要使用setdefaultencoding 。 如果要将unicodestring写入stdio,请明确地对其进行编码。 用setdefaultencoding蒙骗周围会导致stdlib模块和第三方模块以可怕的微妙的方式打破,当不应该发生时,允许strunicode之间的隐式转换。

是的,问题很可能是您的代码页设置不正确。 但是,使用os.popen不会更改代码页; 它会产生一个新的shell,改变它的代码页,然后立即退出,而不会影响你的控制台。 我个人不熟悉Windows,所以我不能告诉你如何从你的python程序中改变控制台的代码页。

如前所述,通过utf-8正确显示unicode数据的方法是在打印string之前对string进行显式编码: print s.encode('utf-8')

更改控制台代码页是不必要的,并且不起作用(特别是,将其设置为65001运行到Python错误 )。 有关详细信息,请参阅此问题 ,以及如何将Unicode字符输出到控制台,而不考虑代码页。

Windows在控制台中不支持UTF-8。 我知道在控制台上显示日语的唯一方法是将控制面板的“区域和语言选项”,“高级选项卡”,“非Unicode程序的语言”更改为日语。 重新启动后,打开一个控制台并运行“chcp”来查找日本控制台的代码页。 然后打印在正确的代码页中显式编码的Unicodestring或字节string。