【问题标题】:UnicodeDecodeError: 'utf8' codec can't decode byte 0xa9 in position 1UnicodeDecodeError:“utf8”编解码器无法解码位置 1 的字节 0xa9
【发布时间】:2015-12-25 01:37:54
【问题描述】:

我正在尝试使用一些 python 模块,但它给了我以下错误:

  UnicodeDecodeError: 'utf8' codec can't decode byte 0xa9 in position 1

我认为是因为我的输入文件中包含非 UTF-8 字符,所以我想在将文件传递给模块之前对其进行清理。

如果我想识别非 UTF-8 字符并删除它们,我该怎么做?我试着用谷歌搜索它,但找不到好的答案。

【问题讨论】:

  • 信息不足。你的输入数据是什么?它应该有一个可识别的编码。您无需猜测。
  • 我使用名为 Apache Tika 的开源软件从一堆 PDF 和 PPT 文章中提取了文本。
  • 我猜它是 Windows 代码页之一,例如 windows-1252。 0xa9 将是版权标志。
  • @roeland 是的,没错。这是一个版权标志!

标签: python unicode utf-8


【解决方案1】:

您可以尝试将文件解码为 UTF-8 忽略任何错误,然后将其重新编码为 UTF-8。

string.decode('utf-8', errors='ignore').encode('utf-8')

或者您可以将字符替换为适当的序列(然后可以将其删除),另请参阅this answer

string.decode('utf-8', errors='replace').encode('utf-8')

但是您应该真正确定您的数据采用哪种编码,并适当地转换它。 iconv 可能会有所帮助。

【讨论】:

    【解决方案2】:

    要么使用上面提到的忽略错误选项,要么尝试使用下面给出的替代方法:

    for line in io.open("u.item", encoding="ISO-8859-1”)

    大多数时候,我从某个地方解析数据,它会以这种格式而不是 UTF-8 编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2021-01-15
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多