python2输出汉字的解决办法暨python2/python3的编码环境参数的查看

版权声明:转载请注明作者(独孤尚良dugushangliang)出处: https://blog.csdn.net/dugushangliang/article/details/89944870

版权声明:转载请注明作者(独孤尚良dugushangliang)出处: https://blog.csdn.net/dugushangliang/article/details/89944870

本来脱身python2的代码困扰了,但有时候python环境是2的环境,还是逃不开中文输出的问题。

参阅http://www.cnblogs.com/xybaby/p/7854126.html得知环境参数的查看方法。

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——著

猜你喜欢

转载自blog.csdn.net/dugushangliang/article/details/89944870
今日推荐