繁体   English   中英

Python是否可以从文件中读取非ascii文本?

[英]Is it possible for Python to read non-ascii text from file?

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

所以如果我在via中读取文件

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")不起作用,因为错误发生在甚至读入行之前。

有两种选择。

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

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

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,则应明确指定它。

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

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

for line in file_obj:
    ...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM