【问题标题】:Read a text file with non-ASCII characters in an unknown encoding读取具有未知编码的非 ASCII 字符的文本文件
【发布时间】:2018-05-27 04:17:14
【问题描述】:

我想读取一个还包含德语而不仅仅是字符的文件。我发现我可以这样做

  >>> import codecs
  >>> file = codecs.open('file.txt','r', encoding='UTF-8')
  >>> lines= file.readlines()

当我尝试在 Python IDLE 中运行我的工作时,这是有效的,但是当我尝试从其他地方运行它时不会给出正确的结果。有想法吗?

【问题讨论】:

  • 你用的是什么版本的python?
  • 这取决于保存文件的编码。如果不是 UTF-8,iso8859-1 可能是个不错的猜测。
  • python3.1.我们真的如何看待我们使用的当前版本?
  • @indiag,尝试使用open('file.txt', 'rb').readlines() 以二进制模式读取文件,然后使用print(repr(line)) 获取您知道包含德语字符的行以及您期望的行。这应该有助于我们确定编码是什么。
  • @indiag,我突然想到readlines() 在二进制模式下可能不起作用,尝试print(repr(open('file.txt', 'rb').read())),然后发布全部或部分输出。

标签: python encoding


【解决方案1】:

您需要知道文本是使用哪种字符编码进行编码的。如果您事先不知道,可以尝试使用chardet 模块进行猜测。首先安装它:

$ pip install chardet

然后,例如以二进制方式读取文件:

>>> import chardet
>>> chardet.detect(open("file.txt", "rb").read())
{'confidence': 0.9690625, 'encoding': 'utf-8'}

那么:

>>> import codecs
>>> import unicodedata
>>> lines = codecs.open('file.txt', 'r', encoding='utf-8').readlines()

【讨论】:

  • 您必须在文件顶部导入编解码器:import codecs
【解决方案2】:

我相信文件被正确读取,但在输出时使用了错误的编码。这是基于您在 IDLE 中获得正确结果的事实。

我建议尝试使用print(line.encode('utf-8')),但恐怕我不知道Python 3 是否会正确打印bytes 对象。

【讨论】:

    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2015-03-20
    • 2019-06-20
    • 1970-01-01
    • 2011-09-29
    相关资源
    最近更新 更多