python中文的显示乱码怎么办?三分钟看完这篇文章就知道了

很多小伙伴发现在使用python中,往往会显示中文乱码,这到底是啥问题呢?其实在使用python显示中文乱码主要是编码问题 。那么通过这篇文章小编来给大家分享一下如何解决这个问题,我们继续往下看 。

python中文的显示乱码怎么办?三分钟看完这篇文章就知道了

文章插图
首先,我们要明确几个概念:
字节流:以utf8/gbk等编码编码的字节流 。
unicode对象:python代码中,a=u'中国', 或者a='中国'.decode()的结果 。
terminal用于显示字符的编码:将一个用utf8/gbk编码的字节流通过terminal指定的编码,去查找对应的字符显示出来 。
【python中文的显示乱码怎么办?三分钟看完这篇文章就知道了】locale:linux下,Locale 是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset) 。一个locale的书写
格式为: 语言[_地域[.字符集]]. 所以说呢,locale总是和一定的字符集相联系的 。比如:zh_CN.GB2312
编码转换原则:unicode是"中介",任何编码之间转换都需要先decode()到unicode 。
针对python,先把结论放在前面,三点:
#coding:utf-8 #.py文件是什么编码就需要告诉python用什么编码去读取这个.py文件 。
sys.stdout.encoding,默认就是locale的编码,print会用sys.stdout.encoding去encode()成字节流,交给terminal显示 。所以locale需要与terminal一致,才能正确print打印出中文 。
sys.setdefaultencoding(‘utf8’),用于指定str.encode() str.decode()的默认编码,默认是ascii 。
对编码字符串a,代码中可以直接写a.encode(“gbk”),但事实上内部自动先通过defaultencoding 去decode成unicode之后再encode()的 。
str(xxx)应该也是用这个去编码的 。
'ascii' codec can't encode characters in position 7-8: ordinal not in range(128)print的时候出现这个错误一般可以使用这个方案去处理 。
为了避免代码中到处都要去encode(“xxx”),还有可能不同的地方写得不一样带来不一致的情况,推荐使用这个:
import sys   reload(sys)   sys.setdefaultencoding('utf8')以上就是小编给大家带来的解决python中文乱码的方法了,希望大家通过阅读小编的文章之后能够有所收获!如果大家觉得小编的文章不错的话,可以多多分享给有需要的人 。

    推荐阅读