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())

这样就没问题啦

上一篇 下一篇

猜你喜欢

热点阅读