python 读文本 乱码_python读取txt读不全问题与乱码问题小结

更多资源加微信公众号:【学术点滴】

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

关于乱码问题网上资源较多

关于为什么只读取了一部分,网上资源太少,解决方案无。在别的电脑上也未遇到此种情况,记录一下,帮助有缘人。

以上参考部分网络资源+个人实验,如有错误请指正!

更多资源加微信公众号:【学术点滴】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值