我碰巧无法在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字符?