在Python3中,使用open函数打开一个纯中文的txt文件时,提示有错误,报错信息如下:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xfe in position 1724: illegal multibyte sequence
用Notepad++打开对应文件,找到对应位置,未发现特殊字符,也没有什么异常情况出现。
个人怀疑是有一些特殊字符无法被正确解释(怀疑是全角、半角啊之类比较细微的问题),于是尝试在open中加入encoding='UTF-8'参数,依然报错:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 0: invalid start byte
看来错的更离谱了,似乎一开始就读不了。
于是尝试新方法,既然读入的文件都是字节流,何不现以二进制读入,然后输出时再解码?于是在open中选择二进制模式(rb),然后用如下语句:
for line in f.readlines():
print (line.decode('gbk'))
这样就可以输出一些字符了!但是读不到文件结尾又中断了。(但是!毕竟可以输出部分文字了!)
在报错位置仔细核对,没有发现什么问题。已输出的部分都正常,是在找不到中断的原因。无奈之下,在open函数中加入errors="ignore"参数,竟然成功读到文末:
with open('qtsFull.txt',encoding='gbk',errors="ignore") as f:
仔细核对了一下原文件和输出文件,发现输出的内容(至少是中文字符部分)并无差异。尽管不知道具体在读入和输出时忽略了哪些错误,但基本功能是实现了(无中断的全文读入),我也就把这个当作一种解决方案吧。

在Python3中遇到使用open函数打开中文文本时的UnicodeDecodeError,尝试通过指定UTF-8编码和使用二进制模式结合decode('gbk')方法,最后通过添加errors='ignore'参数成功读取全文,输出内容与原文件中文部分无差异。

被折叠的 条评论
为什么被折叠?



