Python3 中的 UnicodeDecodeError

6

我正在尝试在一个非常大的 .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编码错误吗?如果是,我如何知道正确的编码方式?

谢谢并致以最好的问候!


可能与https://dev59.com/aG035IYBdhLWcg3wNtRw有关。 - Jeff
发布 file -bi [your_filename] 的输出。您将获得一个编码。之后将 encoding 参数提供给 open() - user5164080
file -bi命令是用来做什么的? - Reihan_amn
2个回答

12

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


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

你知道如何从命令行读取相同的操作吗?我使用 input() 函数,有没有一种方式可以配置它的编码或其他可配置函数? - chivorotkiv
你是怎么想到使用Latin-1编码的? - Reihan_amn
0xed是í字符,您可以在latin-1编码中找到它。 - mic4ael
好困惑啊!自从Unicode编码出现以来,覆盖了所有约2百万个代码点,为什么Latin-1编码还在使用?难道Latin-1编码不应该是UTF编码的子集吗?难道在Latin-1中定义的所有代码现在都不是UTF的一部分吗?如果是这样,为什么UTF不能支持它呢?(抱歉,我在这个领域有点新) - Reihan_amn

0

无法即时识别编码。因此,要么使用我作为注释编写的方法,要么使用类似的构造(如另一个答案提出的),但这是个冒险:

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

一直测试标准Python编码,直到测试完所有编码。

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

更新。实际上,我找到了另一个stackoverflow答案,如果你在Windows上可以使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接