大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
with open(self.path, 'r') as test:
for line in test:
pass
代码如上,出现错误:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position …
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 9: ...
或者是
UnicodeDecodeError: 'gbk' codec can't decode byte 0xb3 in position 9: illegal multibyte sequence
解决方法
主要原因是因为编码的问题,可能是因为0x80这个字节在gbk编码中没有这个字符,可能原字符是两个字节,在gbk里被解析成了一个字节,导致字符不存在。解决方法有两个,一个是二进制读取,一个是改编编码方式:
方法一:二进制读取
with open(self.path, 'rb') as test:
for line in test:
pass
但是这样在读取的是中文文本的时候还可能会产生其他的错误:
TypeError: a bytes-like object is required, not 'str'
方法二:改变打开文件的编码方式
with open(self.path, 'r', encoding='utf-8') as test:
for line in test:
pass
或者
with open(self.path, 'r', encoding='utf-8-sig') as test:
for line in test:
pass
这个utf-8-sig亲测好用,屡试不爽,非常nice
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194235.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...