我有一个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")
不起作用,因为错误发生在甚至读入行之前。
答案 0 :(得分:7)
有两种选择。
decode
明确bytes
到str
。第一个显然是更简单的一个。您没有显示如何打开文件,但假设您的代码如下所示:
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:
就是这样。
如the docs所述,如果您未在文本模式中指定编码:
默认编码取决于平台(无论
locale.getpreferredencoding()
返回什么),但可以使用Python支持的任何编码。
在某些情况下(例如,任何OS X或具有适当配置的Linux),locale.getpreferredencoding()
将始终为“UTF-8”。但它显然永远不会“自动对任何我可能打开的文件的权利”。因此,如果您知道某个文件是UTF-8,则应明确指定该文件。
答案 1 :(得分:2)
对于Python 2和3解决方案,请使用编解码器:
import codecs
file_obj = codecs.open('ur file', "r", "utf-8")
for line in file_obj:
...
否则 - Python 3 - 使用abarnert的solution