python中文乱码问题

前言

写python的时候,经常遇到中文乱码问题,每次出现都会困扰好久,所以这里记下各种案例备忘。

涉及乱码的关键词: 

str, unicode, utf-8 GBK, GB2312, ascii, 还有 Encode, decode

流程综述

先来一段看似很牛逼的人告诉我话,虽然还没想搞清楚它什么意思。 

其实Python里遇到乱码问题,都是没理清哪里编码哪里解码,有些地方是隐含的。
一般输入时,比如从文件读取时,这时数据肯定是某种编码的bytes
只要用正确的编码解码成unicode,在中间处理时全用unicode
在输出时再转成正确的编码,就行了
输出时要注意的地方是,你如果是打印命令行,要转成命令行的编码
如果直接打印unicode,会用set default encoding来隐含编码,一般是ascii,reload后常常是utf-8
这样有可能和命令行的编码不一致,例如Windows中文系统默认是cp936,即gbk
经常看到的这个写法
reload(sys)
sys.setdefaultencoding('utf8')
其作用就是在隐含unicode转bytes时默认用utf-8,而不是ascii

最好的做法是直接转成bytes后再传给相应的函数
避免这些隐含的转换

replace这类string函数, 在遇到既有str,又有unicode时候,都是有隐含转换的。 

 

名词解释

Encode:

Decode:

str, unicode, utf-8 GBK, GB2312, ascii 。。。

 

案例分析

。。。

 

(懒癌发作,复制出来,打个框架以后就懒得写了,有朋友需要的话给我留个言我再补完全文)