python码调试:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf in position 12: illegal...

一、说明

        在文本文件读入的时候,经常出现“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字节,更有利于网上传输!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无水先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值