版权声明:转载请注明作者(独孤尚良dugushangliang)出处: https://blog.csdn.net/dugushangliang/article/details/89944870
本来脱身python2的代码困扰了,但有时候python环境是2的环境,还是逃不开中文输出的问题。
python2.7环境下:
>>> import sys,locale
>>> sys.getdefaultencoding()
'ascii'
>>> locale.getdefaultlocale()
('zh_CN', 'cp936')
>>> sys.stdin.encoding
'cp936'
>>> sys.stdout.encoding
'cp936'
python3.7环境下:
>>> import sys,locale
>>> sys.getdefaultencoding()
'utf-8'
>>> locale.getdefaultlocale()
('zh_CN', 'cp936')
>>> sys.stdin.encoding
'utf-8'
>>> sys.stdout.encoding
'utf-8'
由此对比可得,python3的标准输出默认utf-8所以中文输出没问题,但python2.7的是cp936所以输出不是我们希望的结果。
那好,我们就改了他的编码格式。
import sys
reload(sys)
sys.setdefaultencoding('utf8')
然而python2的下面执行过上面的代码后,标准输入输出的编码格式还是原来的。
治标解决办法如下:
#此为utf-8编码的文本转码为cp936
print( '中文输出:'.decode('utf-8').encode('cp936') )
或者
#字符串前加上u
print( u'你好')
为什么是utf-8转为cp936就可以了呢?为什么是这两个编码格式?
python文件中如果需要有中文,则开头必须有一行声明:
# -*- coding: utf-8 -*-
或者
# coding: utf-8
这是表明本文档的编码格式是utf-8,所以代码中的中文“中文输出:”是utf-8的编码格式,如果我们要看到原汁原味的文本, 则必须和标准输出的编码格式相同。上文中我们查看到,python2的标准输出是cp936,python3的是utf-8,这表明python3的可以直接输出,python2的需要把utf-8转码cp936。
没错,明眼人也看到了,我上文说的是治标办法,那么治本办法呢?
理论上,我们应该修改标准输入输出的编码格式为utf-8,那就一劳永逸了。即:sys.stdout.encoding的值是utf-8。这个怎么设置?本人还不知道。有知道的烦请告知我一声。
附注:如果是先输入再输出,那么我们一般不用考虑编码格式,不管标准输入输出是什么格式,只要支持中文文本,只要输入和输出格式相同,那么我输入的是什么,输出的肯定也是什么。这个情况下不需要转码。
独孤尚良dugushangliang——著