大佬们!关于在for里用each打印中文报错了,为什么会这样?怎么解决?
f = open('测试each检测规则.txt','r')#测试each检测规则.txt里的内容:这是一段文字for each in f:
print(each)
运行结果
Traceback (most recent call last):
File "C:/Users/10797/Desktop/5.13测试each规则.py", line 2, in <module>
for each in f:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 8: illegal multibyte sequence
如果我把文件里的内容改成数字就可以正常打印了,但是改成文字就报错。为什么会报错?我改如何修改,使其能正确打印?{:10_266:}
本帖最后由 Twilight6 于 2020-5-13 17:45 编辑
编码错误,默认打开文件默认编码是'GBK'我们改成'UTF-8'就行
f = open('测试each检测规则.txt','r',encoding='utf-8')
我错了 刚刚说GBK不支持中文 ,GBK全称《汉字内码扩展规范》就是中国的编码 这是编码问题
txt也有不同的编码,有的编码格式将一个汉字编码成三个字节,有点编码格式将一个汉字编码成两个字节。
open默认是以GBK编码打开,
改一下打开的编码方式试试
f = open('测试each检测规则.txt','r',encoding='utf-8') 本帖最后由 悠悠2264 于 2020-5-13 17:41 编辑
编码问题,打开文件默认是用gbk解码,而txt文档不是以gbk编码的。
改成这样试试,用utf-8来解码:
f = open('测试each检测规则.txt','r',encoding="utf-8")
常见的编码方式还有gb2312,ascii,ansi,以后如果报这个错,这几个编码方式都可以试试(把utf-8替换成其他的)
f = open('测试each检测规则.txt','r',encoding='utf-8')
for each in f:
print(each)
Twilight6 发表于 2020-5-13 17:34
编码错误,默认打开文件默认编码是'GBK'我们改成'UTF-8'就行
GBK编码不支持中文???中文编码不支持中文? 永恒的蓝色梦想 发表于 2020-5-13 17:39
???中文编码不支持中文?
噗 我错了 GBK包含全部中文 sunrise085 发表于 2020-5-13 17:37
这是编码问题
txt也有不同的编码,有的编码格式将一个汉字编码成三个字节,有点编码格式将一个汉字编码成 ...
嗯,我改了可用了。
不过我还有一个问题,就是
for each in f 这种语句它的运行方式到底是什么样的?
是不是从左到右查看 f 里的每一个字节(一次前进一个字节),然后赋值到each上?(如果遇到中文就两个字节算一次向前推进)然后这里我程序报错是由于txt编码不同,三个字节算一个汉字程序无法识别所以运行不下去了?
未被驯化的甲鱼 发表于 2020-5-13 17:49
嗯,我改了可用了。
不过我还有一个问题,就是
for each in f 这种语句它的运行方式到底是什么样的?
负数就是从右了 未被驯化的甲鱼 发表于 2020-5-13 17:49
嗯,我改了可用了。
不过我还有一个问题,就是
for each in f 这种语句它的运行方式到底是什么样的?
不完全对。
for each in f 每次读一行而非一个字节
之所以会出问题,是因为编码与解码。
假如编码的时候是一个汉字占三个字节,,解码的时候两个字节算一个汉字,肯定是不对的。就像是一把钥匙一把锁,钥匙不对是打不开锁的。
页:
[1]