更多资源加微信公众号:【学术点滴】
python编码问题是在令人头疼,读取文本时经常出现乱码问题,在一台电脑上可以,转到另一台电脑就出错。
基于此,总结一下自己在编码方面遇到的坑。
读入一个txt文本,代码如下:
with open ('1.txt','r') as fh:
data = fh.read()
print(data)
出错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 10: illegal multibyte sequence
解决方法一:
with open ('1.txt','r',encoding='utf-8') as fh:
data = fh.read()
print(data)
出错:UnicodeEncodeError: 'gbk' codec can't encode character '\ufeff' in position 0: illegal multibyte sequence
解决方法二:
with open ('1.txt','r',encoding='gbk') as fh:
data = fh.read()
print(data)
出错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 41: illegal multibyte sequence
解决方法三:
with open ('1.txt','r',encoding='utf-8') as fh:
data = fh.read().encode('gbk','ignore').decode('gbk')
print(data)
此时没有编码错误了,但是此时又出现个重要问题,就是能够顺利读取文本,但是在新电脑上读不全。一个txt文档只能读一部分,在旧电脑上并未出现这种错误。
如下,直接从txt文本中间开始读取,前边的文本读不到。
接着解决方法三,进一步找方法。
解决方法三(1),按行读取,可读取全部,不会出现只读取一部分的情况。
with open ('1.txt','r',encoding='utf-8') as fh:
for line in fh.readlines():
line = line.strip('
')
print(line.encode('gbk','ignore').decode('gbk'))
print('++++++++++++++++++++++++++++++++++++++++++++++++++++')
解决方法三(2),导入codecs包,可一次性读取全部,不会出现只读取一部分的情况。
with codecs.open('1.txt','r',encoding='utf-8') as fin:
print(fin.read().replace('
','').encode('gbk','ignore').decode('gbk'))
关于乱码问题网上资源较多
关于为什么只读取了一部分,网上资源太少,解决方案无。在别的电脑上也未遇到此种情况,记录一下,帮助有缘人。
以上参考部分网络资源+个人实验,如有错误请指正!
更多资源加微信公众号:【学术点滴】