3

我有一个 UTF-8 格式的 .txt 文件,将其读入 Python 时遇到问题。我有大量文件,转换会很麻烦。

所以如果我通过阅读文件

for line in file_obj:
    ...

我收到以下错误:

  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 291: ordinal not in range(128)

我想x.decode("utf-8")这是行不通的,因为错误发生在该行甚至被读入之前。

4

2 回答 2

7

有两种选择。

  1. 打开文件时指定编码,而不是使用默认值。
  2. 以二进制模式打开文件,并显式地decodebytesstr

第一个显然是更简单的一个。您没有显示如何打开文件,但假设您的代码如下所示:

with open(path) as file_obj:
    for line in file_obj:

做这个:

with open(path, encoding='utf-8') as file_obj:
    for line in file_obj:

而已。

正如文档解释的那样,如果您没有在文本模式下指定编码:

默认编码取决于平台(无论locale.getpreferredencoding()返回什么),但可以使用 Python 支持的任何编码。

在某些情况下(例如,任何 OS X 或具有适当配置的 linux),locale.getpreferredencoding()将始终为“UTF-8”。但它显然永远不会“自动为我可能打开的任何文件提供任何正确的东西”。所以如果你知道一个文件是 UTF-8,你应该明确地指定它。

于 2013-03-19T23:55:40.863 回答
2

对于 Python 2 和 3 解决方案,使用编解码器:

import codecs
file_obj = codecs.open('ur file', "r", "utf-8")

for line in file_obj:
    ...

否则——Python 3——使用 abarnert 的解决方案

于 2013-03-19T23:57:38.047 回答