【问题标题】:UnicodeDecodeError on python3 [duplicate]python3上的UnicodeDecodeError [重复]
【发布时间】:2016-12-24 09:46:17
【问题描述】:

我目前正在尝试在一个非常大的 .txt 文件(几百万行文本)上使用一些简单的正则表达式。导致问题的最简单代码:

file = open("exampleFileName", "r")  
    for line in file:  
        pass

错误信息:

Traceback (most recent call last):
  File "example.py", line 34, in <module>
    example()
  File "example.py", line 16, in example
    for line in file:
  File "/usr/lib/python3.4/codecs.py", line 319, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 7332: invalid continuation byte

我该如何解决这个问题? utf-8 是错误的编码吗?如果是,我怎么知道哪个是对的?

谢谢和最好的问候!

【问题讨论】:

  • 发布file -bi [your_filename]的输出。你会得到一个编码。之后将encoding 参数提供给open()
  • file -bi 命令有什么作用?

标签: python regex utf-8 decoding


【解决方案1】:

看起来它是无效的 UTF-8,您应该尝试使用latin-1 编码读取。试试

file = open('exampleFileName', 'r', encoding='latin-1') 

【讨论】:

  • 你知道从命令行读取时如何做同样的事情吗?我使用input()函数,有没有办法配置它的编码或者有其他可配置的函数?
  • 您是如何发现使用 latin-1 编码的?
  • 0xed 是 í 字符,您可以在 latin-1 编码中找到
  • 好困惑!在 unicode 编码出现覆盖所有 ~2 m 码点之后,为什么 latin-1 编码仍然存在? latin-1 编码不应该是 UTF 编码的子集吗? latin-1 中所有定义的代码现在不应该成为 UTF 的一部分吗?如果是这样,为什么 UTF 不能支持它? (对不起,我在这个领域有点新)
【解决方案2】:

无法即时识别编码。因此,要么使用我作为评论编写的方法,要么使用类似的结构(如另一个答案所建议的那样),但这是一个疯狂的镜头:

try:
    file = open("exampleFileName", "r")
except UnicodeDecodeError:
    try:
        file = open("exampleFileName", "r", encoding="latin2")
    except: #...

以此类推,直到您测试来自Standard Python Encodings 的所有编码。

所以我认为没有必要为这个嵌套的地狱而烦恼,只需执行一次file -bi [filename],复制编码并忘记这个。

UPD。实际上,我找到了another stackoverflow answer,如果你在Windows上可以使用它。

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2016-07-23
    • 2018-03-24
    相关资源
    最近更新 更多