python2输出汉字的解决办法暨python2/python3的编码环境参数的查看 - Go语言中文社区

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


版权声明:转载请注明作者(独孤尚良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——著

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/dugushangliang/article/details/89944870
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 21:03:50
  • 阅读 ( 1590 )
  • 分类:Go环境配置

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢