鱼C论坛

 找回密码
 立即注册
查看: 1759|回复: 6

[已解决]大佬,我根据小甲鱼编的老是报错怎么办

[复制链接]
发表于 2021-3-27 15:21:36 | 显示全部楼层 |阅读模式

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

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

x
大家先看源代码出错的位置
f = open('record.txt',encoding='UTF-8')
boy = []
girl = []
count = 1

for each_line in f :
    if each_line[:6] != '======':
        (role,line_spoken) = each_line.split(':',1) 
        if role == '小甲鱼':
            boy.append(line_spoken)
        if role == '小客服':
            girl.append(line_spoken)


提示是:发生异常: UnicodeDecodeError
'gbk' codec can't decode byte 0xae in position 4: illegal multibyte sequence
问题出在for each_line in f :这一块上


后来,我根据弹幕的提示,把第一行改成了f = open('record.txt',encoding='UTF-8')
之后再次编译运行没有产生错误,请问这是为什么,有大佬能解释一下吗?
最佳答案
2021-3-27 15:31:27
我猜你一开始没写 encoding ='UTF-8'

之所以加上这个,是因为你的系统默认是 gbk 的编码模式

但是你读取的 txt 文件是 utf-8 格式

所以需要指定编码模式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-27 15:31:27 | 显示全部楼层    本楼为最佳答案   
我猜你一开始没写 encoding ='UTF-8'

之所以加上这个,是因为你的系统默认是 gbk 的编码模式

但是你读取的 txt 文件是 utf-8 格式

所以需要指定编码模式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-27 15:34:13 | 显示全部楼层
python第029课小甲鱼和小客服的对话record.txt文件分享
https://fishc.com.cn/thread-145702-1-1.html
(出处: 鱼C论坛)
这里面有这个文件,用这个吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-27 15:34:25 | 显示全部楼层
Daniel_Zhang 发表于 2021-3-27 15:31
我猜你一开始没写 encoding ='UTF-8'

之所以加上这个,是因为你的系统默认是 gbk 的编码模式

那我能更改系统默认的编码模式吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-27 15:35:21 | 显示全部楼层
小伤口 发表于 2021-3-27 15:34
python第029课小甲鱼和小客服的对话record.txt文件分享
https://fishc.com.cn/thread-145702-1-1.html
( ...

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

使用道具 举报

 楼主| 发表于 2021-3-27 15:38:06 | 显示全部楼层
小伤口 发表于 2021-3-27 15:34
python第029课小甲鱼和小客服的对话record.txt文件分享
https://fishc.com.cn/thread-145702-1-1.html
( ...

我知道了,原本的文件因为使用的是UFT-8的编码,但是我在vscode里面打开的时候,因为出现了乱码,我就把源文件删了又复制了一遍,无意间变成了gbk编码,导致出错了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-27 16:17:06 | 显示全部楼层
简单点理解,就是:人眼所见的“字符”,都是以特定的“编码”来存储的,这样电脑才能处理。
‘gbk’ codec 或 UTF系列,就是其中两种字符编码的大类标准。不完全兼容,所以报错不能解码:can't decode ...

附:
最开始编码是 ASCII码(只有128个,如ABC+-等键盘上多数能看到的)。
后来,其他语言的字符也被编码进来,就不够用了。。你想想,希腊语字符、拉丁字符、日语、韩语、汉字……
特别是汉字,我们国家的汉字字符编码,就是GBK-xxx这样的编码标准(一开始对应2万多个汉字,后来又不够用,于是再扩展、增加...)
再到后来,应该是90年代,互联网起来了,渴望一种通用的、兼容的字符编码规范,就应运而生了,
于是,有了“万国码”、“统一码”:Unicode (Universal Multiple-Octet Coded Character Set)
而根据这种Unicode字符编码标准,来具体实现计算机如何存储的过程,叫做:UTF。具体又分为:UTF-8、UTF-16、UTF-32  
…… 我写不下去了,哈哈,有兴趣自己搜搜看吧

ps: 遇到编码问题,只要记得,大多数情况都是用UTF-8即可。
具体问题则是 编码encode、或解码decode,发生了不兼容(谁不兼容谁)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 05:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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