python 编码问题
2018-09-27 本文已影响0人
超人不会飞_9664
以前python2.x版本的编码问题较多,所以这里只针对python3.x版本的问题进行讨论。
Unicode 编码
unicode编码可以理解为万国码,对所有国家都通用,像utf-8,utf-16都是其中一员,Unicode 为每种语言设置了唯一的二进制编码表示方式,也就是说无论哪个国家的语言,都可以在 Unicode 上找到对应的代码,换句话说unicode编码就是一‘’中介‘’。
其他编码系统到unicode编码的过程我们称之为decode(解码),反之我们称为encode(编码),例如将A编码转化成B编码,
A编码-->decode(A)-->unicode-->encode(B)-->B编码
通过urllib.request模块中的urlopen()函数得到的实例对象用read()读取之后返回的二进制的数据,我们可以通过decode(A代码)解码成Unicode形式,A代码就是网页的编码的方式,一般为utf-8
python使用open()打开文件时时的默认编码是与操作系统时默认编码是一样的。
with open('123.txt','w') as f:
f.write('甲鱼')
with open('123.txt') as f:
print(f.read())
上诉代码就会正常运行。但是如果在再开文件时设置编码跟操作系统编码不一样就会乱码。如下
with open('123.txt','w',encoding ='utf-8')as f:
f.write('甲鱼')
with open('123.txt')as f:
print(f.read())
输出结果为:
鐢查奔
所以很显然写入磁盘时用的utf-8编码,但是打开文件读取时用是操作系统默认的编码(cp936)自然会乱码
因此如果非要标注encoding 就要让写入程序和读取文件是同一种编码方式,
with open('123.txt','w',encoding ='utf-8')as f:
f.write('甲鱼')
with open('123.txt',encoding ='utf-8')as f:
print(f.read())
这样就没问题啦