【问题标题】:Python readline not working with codecsPython readline 不适用于编解码器
【发布时间】:2016-10-26 02:58:19
【问题描述】:

我正在尝试打开、打印和读取包含特殊字符(例如 §)的文本文件。下面是我正在运行的代码:

    import codecs
    f = codecs.open('sample_text.txt', mode='r', encoding='utf_8')
    print f.readline()

前两行有效,但第三行无效。错误代码说: Traceback(最近一次调用最后一次):

"C:\Users\mallikk\Documents\Python Scripts\special_char_test.py", line 6, in <module>
    print f.readline()
  File "C:\Anaconda2\lib\codecs.py", line 690, in readline
    return self.reader.readline(size)
  File "C:\Anaconda2\lib\codecs.py", line 545, in readline
    data = self.read(readsize, firstline=True)
  File "C:\Anaconda2\lib\codecs.py", line 492, in read
    newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa7 in position 13: invalid start byte

有什么想法吗?如果我能澄清任何事情或添加更多细节,请告诉我。非常感谢!

【问题讨论】:

  • 此文件未以 UTF-8 编码。找到实际的编码并使用它。
  • 我认为 0xa7 不是有效的 utf8。你确定它是utf-8吗?另外你为什么使用编解码器而不是open
  • @user2357112 它不在 utf-8 中。我在记事本++中更改了它。感谢您的帮助!
  • @Shivani This question 讨论 codecs.open 与内置 open 和 io.open。看起来你在 python2 中是对的,而在 python3 中open 是首选。

标签: python readline


【解决方案1】:

要扩展评论者所说的内容,您需要找出文件的编码。我知道的最简单的方法是:

  1. 在 Firefox 中打开文件。
  2. 右键单击页面并选择“查看页面信息”
  3. 看看“文本编码”是什么。
  4. 然后您可以在f = codecs.open(...) 行中检查要使用的编解码器codecs documentation,而不是utf_8

步骤 1-3 的屏幕截图:

【讨论】:

    【解决方案2】:

    看起来您在 Windows 机器上,文本文件的编码可能与 UTF-8 不同,您可能想尝试使用 cp1252/ISO-8859-1 来解码字节字符串,然后使用 utf 再次对其进行编码-8。

    您还可以在此处查看有关如何阅读文件的最佳实践的建议 - Difference between open and codecs.open in Python

    【讨论】:

      猜你喜欢
      • 2018-12-11
      • 2013-09-21
      • 2020-02-23
      • 2019-12-18
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2012-05-01
      • 2015-03-21
      相关资源
      最近更新 更多