admin管理员组文章数量:1611142
一、说明
在文本文件读入的时候,经常出现“gbk”错误码。本文记录这种错误出现的机会,以及如何改进错误。
二、错误再现
在如下的原始代码中:
stopkey = [w.strip() for w in codecs.open('data/stopWord.txt', 'r').readlines()]
出现错误:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 12: illegal multibyte sequen
三、错误原因
这是因为stopWord.txt内存在汉字与字母混合的结果。我们可以将Unicode和 UTF-8的对应方式列出:
Unicode符号范围(十六进制) | UTF-8编码方式(二进制)
------------------------------------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
当前的TXT文件都默认是Unicode码,如果TXT是Unicode码,那么很容易对齐取出,不会出错。然而如果TXT是UTF-8,(一般从网上下载的多为UTF-8)那么,按照Unicode码取出,必然是出现错误,因为UTF-8码长短不一致,容易出现歧义。因此,在读取的时候预先告诉系统,此文本是UTF-8码,那么按照UTF-8协议读出来就不会有错了。
详细记录请看:计算机码ASCII、Unicode、GBK、UTF-8之间的关系
四、改正办法
4.1 或者按照二进制文件读取
改正如下:
stopkey = [ w.strip() for w in codecs.open('data/stopWord.txt', 'rb').readlines()]
4.2 或者指定文本协议是UTF-8,代码如下
stopkey = [w.strip() for w in codecs.open('data/stopWord.txt', 'r',,encoding='utf-8').readlines()]
五、后记
这种错误可能在任何字符串使用的时候发生。一般做法就是告诉系统,这里是UTF-8码!值得一提的是:UTF-8不是一种新的码,是对unicode中的那些零进行压缩的码,比如:Unicode=0000 0000-0000 007F对应的UTF-8码是 01111111,显然从4字节转成1字节,更有利于网上传输!
本文标签: CodecDecodegbkPythonUnicodeDecodeError
版权声明:本文标题:python码调试:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf in position 12: illegal... 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1728605602a1165410.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论