时宇羽然 发表于 2021-3-27 15:21:36

大佬,我根据小甲鱼编的老是报错怎么办

大家先看源代码出错的位置
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')
之后再次编译运行没有产生错误,请问这是为什么,有大佬能解释一下吗?

Daniel_Zhang 发表于 2021-3-27 15:31:27

我猜你一开始没写 encoding ='UTF-8'

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

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

所以需要指定编码模式

小伤口 发表于 2021-3-27 15:34:13

python第029课小甲鱼和小客服的对话record.txt文件分享
https://fishc.com.cn/thread-145702-1-1.html
(出处: 鱼C论坛)
这里面有这个文件,用这个吧{:5_102:}

时宇羽然 发表于 2021-3-27 15:34:25

Daniel_Zhang 发表于 2021-3-27 15:31
我猜你一开始没写 encoding ='UTF-8'

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


那我能更改系统默认的编码模式吗?

时宇羽然 发表于 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,我看看

时宇羽然 发表于 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编码,导致出错了。

阿奇_o 发表于 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,发生了不兼容(谁不兼容谁)。
页: [1]
查看完整版本: 大佬,我根据小甲鱼编的老是报错怎么办