python3 上的 UnicodeDecodeError
UnicodeDecodeError on python3
我目前正在尝试在一个非常大的 .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 是错误的编码吗?如果是,我怎么知道哪个是正确的?
谢谢并致以最诚挚的问候!
它似乎是无效的 UTF-8,您应该尝试使用 latin-1
编码来阅读。尝试
file = open('exampleFileName', 'r', encoding='latin-1')
无法即时识别编码。因此,要么使用我作为评论写的方法,要么使用类似的结构(如另一个答案所建议的),但这是一个疯狂的镜头:
try:
file = open("exampleFileName", "r")
except UnicodeDecodeError:
try:
file = open("exampleFileName", "r", encoding="latin2")
except: #...
依此类推,直到您测试了 Standard Python Encodings 的所有编码。
所以我认为没有必要为这个嵌套的地狱而烦恼,只需file -bi [filename]
一次,复制编码并忘记这个。
UPD. 实际上,我找到了 another Whosebug answer 如果你在 Windows[=24 上,你可以使用它=].
我目前正在尝试在一个非常大的 .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 是错误的编码吗?如果是,我怎么知道哪个是正确的?
谢谢并致以最诚挚的问候!
它似乎是无效的 UTF-8,您应该尝试使用 latin-1
编码来阅读。尝试
file = open('exampleFileName', 'r', encoding='latin-1')
无法即时识别编码。因此,要么使用我作为评论写的方法,要么使用类似的结构(如另一个答案所建议的),但这是一个疯狂的镜头:
try:
file = open("exampleFileName", "r")
except UnicodeDecodeError:
try:
file = open("exampleFileName", "r", encoding="latin2")
except: #...
依此类推,直到您测试了 Standard Python Encodings 的所有编码。
所以我认为没有必要为这个嵌套的地狱而烦恼,只需file -bi [filename]
一次,复制编码并忘记这个。
UPD. 实际上,我找到了 another Whosebug answer 如果你在 Windows[=24 上,你可以使用它=].