admin管理员组文章数量:1612831
问题引入
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence
这样的错误估计大家都不陌生。我也是被这种错误折磨许久。在open函数参数中设置encoding='utf-8’也不能解决问题,会出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
类似错误。
通过查询大量的资料,我才搞明白这种错误背后的原因是什么。
该问题的根源在于Windows中与Unicode的编码方法。
以系统自带的记事本为例:
记事本“另存为”中有4种编码方式,含义为:
ANSI: 对英文系统即ASCII 对中文系统即gbk/big5
Unicode: UTF-16(LE)
Unicode big endian: UTF-16(BE)
UTF-8:UTF-8-SIG
其中Unicode相关编码方式有3种,这3种编码方式的区别不再赘述,我们可以从文件的头部(即Windows中的特色!BOM:byte order mark)来区分一个文件是属于哪种编码。
当头部开始的两个字节为 FF FE时,是UTF-16(LE)编码;当头部的两个字节为FEFF时,是UTF-16(BE)编码;当头部两个字节为EF BB时,是UTF-8-sig编码。
实际问题
我遇到这样的问题是在《机器学习实战》朴素贝叶斯中,当时是对垃圾邮件分类,有50个文件,读取文件后报错。
word_list=text_parse(open('native_bayes email dataset/ham/%d.txt'%i,'r').read()) # 读取每个非垃圾邮件,并字符串转换成字符串列表
用gbk编码的无法用utf-8解码,继续改回去,在for循环中 加print(i),查看哪个txt文件出问题:
```python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Traceback (most recent call last):
File , line 1, in <module>
bayes.spamTest()
File "F:/PycharmProject/bayes_practice_1.py", line 96, in spamTest
word_list = text_parse(open('native_bayes email dataset/ham/%d.txt'%i,'r'' % i).read())
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 199: illegal multibyte sequence
查出问题在 文档《23.Txt》中,“SciFinance?is ”改成“SciFinance is ”即可,原文如下:
SciFinance?is a derivatives pricing and risk model development tool that automatically generates C/C++ and GPU-enabled source code from concise, high-level model specifications. No parallel computing or CUDA programming expertise is required.
更改后问题便可解决!
版权声明:本文标题:《机器学习实战》:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xae in position 199: illegal multibyte 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728604471a1165276.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论