为什么Python脚本中的中文在CMD中输入为乱码

Python078

为什么Python脚本中的中文在CMD中输入为乱码,第1张

你可以查看一下你的脚本的编码格式是否和你cmd环境的编码格式一致. windows环境下使用gb2312

python脚本中如果使用utf-8的话,则增加

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

在脚本中可以修改你的编码格式, 方法如下:

sys.getdefaultencoding()

reload(sys)

sys.setdefaultencoding('UTF-8')

sys.getdefaultencoding()

这里的'utf-8'就是你设置的默认格式. 你可以进行修改为与系统一致的格式.例如:GB2312

python2.X,代码中指定了UTF-8,但是在cmd命令行窗口时,打印的中文仍然会乱码。

在python3不存在该问题

运行结果:

原因

中文windows默认的输出编码为gbk ,与脚本中定义的UTF-8不一样,所以出现了解码失败的情况。

相关推荐:《Python基础教程》

解决方法

有如下两种方法可以解决这个问题

方法一

我们可以通过先把中文解码为unicode,然后再转化为gbk来解决这个问题:

修改后运行结果:

方法二

当然,我们也可以通过改变cmd命令行窗口的输出格式来解决这个问题:

    ·chcp 65001 就是换成UTF-8代码页

    ·chcp 936 可以换回默认的GBK

但是这样就降低了脚本的兼容性,在其他环境运行的时候可能还会出现这样的错误,而且可能会影响其他脚本运行,所以推荐使用第一种方法。

乱码原因:

因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件。但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台直接打印utf-8的字符串当然是乱码了。

解决方法:

在控制台打印的地方用一个转码就ok了,打印的时候这么写:

print myname.decode('UTF-8').encode('GBK')

比较通用的方法应该是:

import sys

type = sys.getfilesystemencoding()

print myname.decode('UTF-8').encode(type)