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

问题

这是在参照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还有官方文档说明,有兴趣的同学可以参考一下。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值