鱼C论坛

 找回密码
 立即注册
查看: 1030|回复: 9

[已解决]大佬们!关于在for里用each打印中文报错了,为什么会这样?怎么解决?

[复制链接]
发表于 2020-5-13 17:32:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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



如果我把文件里的内容改成数字就可以正常打印了,但是改成文字就报错。为什么会报错?我改如何修改,使其能正确打印?
最佳答案
2020-5-13 23:37:58
未被驯化的甲鱼 发表于 2020-5-13 17:49
嗯,我改了可用了。
不过我还有一个问题,就是
for each in f 这种语句它的运行方式到底是什么样的?

不完全对。
for each in f 每次读一行而非一个字节
之所以会出问题,是因为编码与解码。
假如编码的时候是一个汉字占三个字节,,解码的时候两个字节算一个汉字,肯定是不对的。就像是一把钥匙一把锁,钥匙不对是打不开锁的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-13 17:34:45 | 显示全部楼层
本帖最后由 Twilight6 于 2020-5-13 17:45 编辑

编码错误,默认打开文件默认编码是'GBK'  我们改成'UTF-8'就行
f = open('测试each检测规则.txt','r',encoding='utf-8')

我错了 刚刚  说GBK不支持中文 ,GBK全称《汉字内码扩展规范》就是中国的编码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
liuzhengyuan + 1 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 17:37:25 | 显示全部楼层
这是编码问题
txt也有不同的编码,有的编码格式将一个汉字编码成三个字节,有点编码格式将一个汉字编码成两个字节。
open默认是以GBK编码打开,
改一下打开的编码方式试试
f = open('测试each检测规则.txt','r',encoding='utf-8')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 17:38:17 | 显示全部楼层
本帖最后由 悠悠2264 于 2020-5-13 17:41 编辑

编码问题,打开文件默认是用gbk解码,而txt文档不是以gbk编码的。
改成这样试试,用utf-8来解码:
f = open('测试each检测规则.txt','r',encoding="utf-8")
常见的编码方式还有gb2312,ascii,ansi,以后如果报这个错,这几个编码方式都可以试试(把utf-8替换成其他的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 17:38:31 | 显示全部楼层
f = open('测试each检测规则.txt','r',encoding='utf-8')
for each in f:
    print(each)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 17:39:11 | 显示全部楼层
Twilight6 发表于 2020-5-13 17:34
编码错误,默认打开文件默认编码是'GBK'  我们改成'UTF-8'就行
GBK编码不支持中文
???中文编码不支持中文?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 17:43:13 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-13 17:39
???中文编码不支持中文?

噗 我错了 GBK包含全部中文
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-13 17:49:50 | 显示全部楼层
sunrise085 发表于 2020-5-13 17:37
这是编码问题
txt也有不同的编码,有的编码格式将一个汉字编码成三个字节,有点编码格式将一个汉字编码成 ...

嗯,我改了可用了。
不过我还有一个问题,就是
for each in f 这种语句它的运行方式到底是什么样的?
是不是从左到右查看 f 里的每一个字节(一次前进一个字节),然后赋值到each上?(如果遇到中文就两个字节算一次向前推进)然后这里我程序报错是由于txt编码不同,三个字节算一个汉字程序无法识别所以运行不下去了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 18:40:49 | 显示全部楼层
未被驯化的甲鱼 发表于 2020-5-13 17:49
嗯,我改了可用了。
不过我还有一个问题,就是
for each in f 这种语句它的运行方式到底是什么样的?

负数就是从右了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 23:37:58 | 显示全部楼层    本楼为最佳答案   
未被驯化的甲鱼 发表于 2020-5-13 17:49
嗯,我改了可用了。
不过我还有一个问题,就是
for each in f 这种语句它的运行方式到底是什么样的?

不完全对。
for each in f 每次读一行而非一个字节
之所以会出问题,是因为编码与解码。
假如编码的时候是一个汉字占三个字节,,解码的时候两个字节算一个汉字,肯定是不对的。就像是一把钥匙一把锁,钥匙不对是打不开锁的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 07:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表