起因:

写python的环境是python3.7,运行python的环境是python2.7,
原本完美显示的中文小提示一下体验喂了狗,力挽狂澜为显示中文义不容辞。

过程:

乱码原因:
编码和解码时用了不同或者不兼容的字符集。
例如:用UTF-8编码存储,用GBK解码显示会造成乱码。
参考自:十分钟搞清字符集和字符编码(这里的为什么会乱码讲解得非常精彩)

中文显示乱码原因:
数据采用非Unicode且非GBK的编码格式。

怎么办:

思路即上述参考的红字:文件声明为utf-8,且用utf-8的编码保存的源文件,但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台直接打印utf-8的字符串就显示乱码了。
(即上述的乱码例子:用UTF-8编码存储,用GBK解码显示会造成乱码。)

test.py源文件:

# coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def print_utf8(arg):
    print(arg.decode('utf-8').encode(sys.getfilesystemencoding()))
    
print_utf8('输出中文')

unicode编码做中转:将utf-8编码的字符串转换成unicode编码,再将unicode编码的字符串转换成系统编码的格式。

因为试了一下,本地电脑可以直接打开py显示中文,A电脑直接运行py文件还是显示乱码(因为A电脑系统默认编码格式不是GBK??)

因此用批处理调用py文件,将活动代码页(字符集的别名)编号设置为GBK

python 中文输出乱码 python 中文 乱码_默认编码

@echo off
chcp 936
python "%~dp0\test.py" %*
pause

拓展:

字符集(Character set)是多个字符的集合。
ASCII(American Standard Code for Information Interchange)美国信息交换标准代码,主要用于显示现代英语和其他西欧语言。
GBK字符集,中文名国家标准扩展字符集(GB=GuóBiāo国标;K=Kuò扩,即扩展)