在Windows上设置Pythonterminal编码

我碰巧无法在Windows上的Pythonterminal中设置字符编码。 据官方指导,这是一块蛋糕:

# -*- coding: utf-8 -*- 

好的,现在testing:

 print 'Русский' 

制作一块mojibake。 什么做错了?

PS IDE是Visual Studio 2010,如果它很重要的话

更新:请参阅JF Sebastian的答案,以获得更好的解释和更好的解决方案。

# -*- coding: utf-8 -*-设置源文件的编码,而不是输出编码。

您必须在使用与您的终端使用完全相同的编码打印之前编码字符串。 在你的情况下,我猜你的代码页是西里尔(cp866)。 因此,

 print 'Русский'.encode("cp866") 

你应该使用unicode:

 print u'Русский' 

或者切换到python3(默认为unicode)。

它产生mojibake,因为''是Python 2中的字节字符串(除非from __future__ import unicode_literals )。 您正在将utf-8字节(源代码编码)打印到使用其他字符编码的Windows控制台(如果您看到mojibake,则编码是不同的):

 >>> print(u'Русский'.encode('utf-8').decode('cp866')) ╨а╤Г╤Б╤Б╨║╨╕╨╣ 

解决办法是按照@JBernardo的建议打印Unicode:

 #!/usr/bin/env python # -*- coding: utf-8 -*- print(u'Русский') 

如果控制台编码支持西里尔字母,例如,如果是cp866 ,它将cp866

如果你想把输出重定向到一个文件, 您可以使用PYTHONIOENCODING环境变量来设置Python用于I / O的字符编码:

 Z:\> set PYTHONIOENCODING=utf-8 Z:\> python your_script.py > output.utf-8.txt 

如果要打印无法使用控制台编码 ( OEM代码页 ) 表示的Unicode字符,则可以安装win-unicode-console Python包 :

 Z:\> py -m pip install win_unicode_console Z:\> py -m run your_script.py 

如果其他人得到这个页面时,搜索最简单的是设置窗口终端代码页

 CHCP 65001 

或者为电源外壳启动它

 powershell.exe -NoExit /c "chcp.com 65001" 

从是否有一个Windows命令外壳,将显示Unicode字符?