utf8编码和中文不能解码问题解决

首先我们知道utf-8是一种可变长编码格式,表现为1个英文字母占1个字节,一个汉字占3个字节。

特点:

  1.支持大部分中文。

  2.是为传输设计的编码。

  3.是unicode字符集(涉及全球所有字符,汉字,英文,日语.......)的一种实现。

场景:有的同学在遇到with open()这个方法读取某个txt文件时,指定了方法的参数encoding=utf8,制定了读取方式为r,修改了txt文件也是utf8的编码格式,运行代码发现报错了,信息大概就是 ****codec cannot decode byte oxd4****。

分析:报错信息说明oxd4解码失败,定位解码过程就在于我们选择了r的读取方式。文本模式读取,将字节byte(utf8)转成字符串str(unicode),导致某个编码格式为utf8的中文字符在解码为unicode时报错。

解决:将r改为rb,即二进制模式读取,不存在中间的将字节byte(utf8)转(解码)为字符串str(unicode)的过程。

总结:

  1.uft8->unicode,使用decode()方法,方法默认使用“utf8”的编码。(可以理解为我现在指定磁盘上某个编码为uft8的文件去解码为unicode,,方便后续我的python解释器内尺存使用)

  2.r,文本读取模式,即byte->str的转换,但是会遇到部分中文不能成功的情况,即上面的场景。

  3.rb,二进制读取,不将byte转换成str(可以理解为字符集不切换,编码也不切换)

  4.如果公司规定保持2的代码,那么我们可以试试使用iso-8859-1编码格式,这是一种单字节编码格式。

原文地址:https://www.cnblogs.com/frantz/p/13558027.html