当前位置: 首页 > 工具软件 > 9t > 使用案例 >

解决UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c

慕学海
2023-12-01

问题

这是在参照Yoon Kim的github实现论文Convolutional Neural Networks for Sentence Classification时遇到的问题。代码中使用的是经过处理的MR数据集
原代码以二进制形式读取文件,代码形如:

with open(file, 'rb') as f:
        for raw_line in f:
            # process

但是我在运行时会报TypeError错误:

TypeError: sequence item 0: expected str instance, bytes found

一个简单的解决方式是不再使用二进制读取,改为普通读取,即去掉‘r’,但是此时抛出UnicodeDecodeError错误:

UnicodeDecodeError: ‘utf8’ codec can’t decode byte 0xf3 in position
4645: invalid continuation byte

初步推测这是文件中包含了utf8也无法解码的偏僻字符,导致报此错误。

解决方法

我在百度上搜索了一会儿后发现中文网站上大多为 ‘gbk’ codec can’t decode byte XXX,然后解决方法是改为utf8编码,然而我的Python代码本身就是utf8编码。

吸取上次解决Ubuntu18的bug导致系统启动后黑屏的问题的教训,我在意识到百度上没有我想要的答案后,就到stackoverflow上搜索相关问题了,果然找到了解决方法
1. 使用unicode解码:

with open(file, 'r') as f:
        for str in f:
            # unicode 是python2里的,我在python3测试会有问题
            str = unicode(str, errors = 'replace')
            # or
            str = unicode(str, errors = 'ignore')

该方法返回一个不包含那些无法解析的字符的字符串
2. 使用codecs读取文件:

import codecs

with codecs.open(file, 'r', encoding='utf-8', 
        errors='ignore') as f:
    for str in f:
        # process

关于utf8无法解析的字符串的问题,Python还有官方文档说明,有兴趣的同学可以参考一下。

 类似资料: