Python在DOS窗口中未正确显示简体中文

2 投票
2 回答
3069 浏览
提问于 2025-04-17 19:35

我有一个Python脚本,可以在命令行上打印中文输出。在Eclipse里运行得很好。但是,当我在DOS窗口里运行时,它却显示问号(?)和一些乱码。这可能是因为编码问题,比如big-5和gb编码的区别吗?如果是的话,我该怎么控制它呢?

顺便说一下,我已经安装了亚洲字符集,所以在Eclipse里可以正常工作。

补充一下:通过结合使用chcp、encode('utf-8')和设置非Unicode处理程序,现在我可以看到字符了,但简单的打印操作却导致了一个异常:

chcp 65001
Active code page: 65001

Z:\src>c:\Python27\python.exe mobTest.py
Traceback (most recent call last):
  File "mobTest.py", line 94, in <module>
    print u'哈哈'.encode('utf-8')
IOError: [Errno 13] Permission denied

2 个回答

0

这是我解决简体中文问题的方法:

  1. 在区域和语言设置中,把非Unicode程序的显示设置为简体中文。
  2. 在你的Python文件中添加以下这一行(我建议先备份一下文件):

    -- coding: gbk --

这行代码会替换掉你之前的编码设置(我之前用的是utf-8)。你代码里已经存在的utf-8字符串会被重新编码成gbk。所以你需要重新输入那些行。

现在在DOS窗口和Eclipse中运行时,就能显示正确的字符了。 我猜对于繁体中文,可以通过在Windows设置中选择繁体中文和big5来做类似的操作。具体测试留给读者自己去尝试。

2

你的系统语言设置是什么?比如说,English (United States)(美国英语)使用的是437编码,这种编码不支持中文字符。而如果你设置成Chinese (Simplified, PRC)(简体中文,中华人民共和国),那么就可以在控制台上打印中文了。

你可以在控制面板的区域和语言设置中更改这个选项(在Windows 7中),找到管理选项卡,然后重启电脑。这样一来,你就可以在控制台上打印Unicode格式的中文字符串了。你甚至可以直接输入中文,因为会有输入法可用。

更改系统语言设置只会影响控制台和一些不支持Unicode的程序。大多数现代程序不会受到影响。

编辑:以下是一个使用中国大陆地区设置并在Windows控制台中运行的示例:

Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print u'哈哈'
哈哈
>>> import sys
>>> sys.stdout.encoding
'cp936'

这是一个使用UTF-8编码的示例脚本。确保在保存源代码时选择UTF-8编码,这在#coding注释中有说明:

# coding: utf-8
print u'哈哈'
print '哈哈' # this will be UTF-8 encoded, and NOT work

执行结果:

C:\>python x.py
哈哈
鍝堝搱

撰写回答