关于Python中中文文本文件使用二进制方式读取后的解码UnicodeDecodeError问题
最近老猿在进行文件操作的验证测试,发现对于中文文本文件如果使用二进制方式打开,返回的类型是bytes,如果要转换成可读的字符串信息需要进行解码。可是老猿使用decode()或decode(“UTF-8”)解码后报错:
Traceback (most recent call last):
File “<pyshell#24>”, line 3, in
print(“line.decode():”,line.decode())
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb3 in position 0: invalid start byte
在网上查了一下,发现给出的解决方法复杂还不容易理解。老猿认为这就是个字符集编码的问题,但以前老猿没有学习过字符集编码的相关知识,于是在网上查了相关的资料,具体请见老猿转载的几篇文章:
1、《转:使用DOS命令chcp查看windows操作系统的默认编码以及编码和语言的对应关系》;
2、转:浅析windows下字符集和文件编码存储/utf8/gbk
3、《转1:Python字符编码详解》
4、《转2:Python字符编码详解》
5、《转:Python常见字符编码及其之间的转换》
通过以上几篇文章的学习,老猿确认了是由于操作系统默认字符集是’GBK’而不是’UTF-8’导致的,因此文件存储后的编码也是GBK,则解码时调用decode(‘GBK’)或decode(‘GB2312’)就可以解决。
案例:
>>> fp = open(r"c:\temp\test.txt","rb")
>>> for line in fp:
print("line:",line)
try:print("line.decode():",line.decode())
except:print("line.decode() error")
try:print("line.decode('UTF-8'):",line.decode())
except:print("line.decode('UTF-8') error")
print("line.decode('gbk'):",line.decode('GBK'))
print("line.decode('gb2312'):",line.decode('GB2312'))
line: b'\xb3\xfc\xd6\xdd\xce\xf7\xbd\xa7\r\n'
line.decode() error
line.decode('UTF-8') error
line.decode('gbk'): 滁州西涧
line.decode('gb2312'): 滁州西涧
line: b'[\xcc\xc6] \xce\xa4\xd3\xa6\xce\xef\r\n'
line.decode() error
line.decode('UTF-8') error
line.decode('gbk'): [唐] 韦应物
line.decode('gb2312'): [唐] 韦应物
line: b'\xb6\xc0\xc1\xaf\xd3\xc4\xb2\xdd\xbd\xa7\xb1\xdf\xc9\xfa\xa3\xac\xc9\xcf\xd3\xd0\xbb\xc6\xf0\xbf\xc9\xee\xca\xf7\xc3\xf9\xa1\xa3\r\n'
line.decode() error
line.decode('UTF-8') error
line.decode('gbk'): 独怜幽草涧边生,上有黄鹂深树鸣。
line.decode('gb2312'): 独怜幽草涧边生,上有黄鹂深树鸣。
line: b'\xb4\xba\xb3\xb1\xb4\xf8\xd3\xea\xcd\xed\xc0\xb4\xbc\xb1\xa3\xac\xd2\xb0\xb6\xc9\xce\xde\xc8\xcb\xd6\xdb\xd7\xd4\xba\xe1\xa1\xa3'
line.decode() error
line.decode('UTF-8') error
line.decode('gbk'): 春潮带雨晚来急,野渡无人舟自横。
line.decode('gb2312'): 春潮带雨晚来急,野渡无人舟自横。
>>>
老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython
请大家多多支持,点赞、评论和加关注!谢谢!
相关文章
- Python数据序列化:json.dumps中文乱码
- 基于蒙特卡洛法的规模化电动车有序充放电及负荷预测(Python&Matlab实现)
- 8.python处理数据——查看、删除、填充缺失值,数据查重
- 5.Python中pandas对Series与DataFrame对象的索引与切片详解
- G.1用python进行精细中文分句(基于正则表达式),HarvestText:文本挖掘和预处理工具
- Python第三方库jieba(中文分词)入门与进阶(官方文档)
- 用python写爬虫
- python:使用matplotlib画图时,中文乱码的问题
- 【python】获取网页中中文内容并分词
- 使用virtualenv搭建独立的Python环境
- python 支持中文
- Python中文编码问题(字符串前面加'u')
- python 中文分词:结巴分词
- python解决处理中文的问题
- python 直接插入排序
- 【Python】单行注释 || 多行注释 || 中文编码声明注释 || 以上博客知识汇总 || 变量&数据类型&类型转换&注释
- python爬取网易翻译 和MD5加密
- Python音视频剪辑库MoviePy中文教程导览
- PyQt(Python+Qt)学习随笔:QTabWidget选项卡部件外观展示类属性elideMode、documentMode、tabBarAutoHide、tabShape介绍
- Python 中文编码
- python解压zip文件后,中文文件名存在乱码问题解决方案
- python搭建HTTP代理 和 使用HTTP代理
- python - RSA的加密和解密
- windows下解决python输出utf-8中文
- [Oracle] 用python插入中文
- Python 命令行参数