正在以utf-8和非法字节打开文件



我认为我的文件可能是混合编码的,它是一个非常wierd的文件。当我打开一个编码更正常的文件时,我制作的程序运行良好。在过去的4个小时里,我一直非常困惑如何让它正常工作。实际上可能比4>.>长很多。

import os
os.chdir("C:\Users\Kingsaber\documents\Desktop\coding")
with open("file1.txt", "r", encoding = "utf-8") as a:
line1 = a.read().splitlines()
with open("file2.txt", "r", encoding = "utf-8") as b:
line2 = b.read().splitlines()
temp3 = tuple(set(line1) - set(line2))
print(temp3)
changes = open("output.txt", "w")
temp3 = list(temp3)
with open("output.txt", 'w') as file_handler:
for item in temp3:
file_handler.write("{}n".format(item))

Python抛出错误

Traceback (most recent call last):
File "C:UsersKingsaberDocumentsDesktopdiff2.py", line 11, in <module>
line1 = a.read().splitlines()
File "C:Python34libcodecs.py", line 313, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 725130-725131: invalid continuation byte`

这个想法是打开两个包含大约100000行代码的非常大的文件,并比较文件1和文件2的唯一行。我发现有人用一套来做这件事,到目前为止,在用我在记事本中创建的快速txt文件测试它后,它运行得很好。

然而,我试图打开的文件中似乎有utf-8的无效字节。我想在将其传递到元组之前删除这些invaid字节。任何帮助都是非常感激的,因为我实际上已经尝试过在谷歌上搜索正确的方法,但还没有找到或理解正确的解决方案。我实际上会链接其中一个文件,以防有帮助,因为这很不正常。还有一种方法可以实际检查记事本++中无效的字节。我很好奇是什么原因导致了这个错误。将notepad++中的文件作为utf-8编码的文件查看似乎可以很好地显示文本。

http://www.mediafire.com/file/5uax2g962ad1ali/file1.txt

难道没有办法让python忽略这些字节吗?

您的问题可以归结为

text = open("file1.txt", "r", encoding = "utf-8").read()

您可以通过更改解码器处理错误的方式来修复它。选项有"strict"(默认值)、"replace"(放入?in)和"ignore"(跳过)。UTF-8有一个有趣的特性,它可以确定下一个字符的起始位置,所以不应该太松散。

你可以从一开始就制作

with open("file1.txt", "r", encoding = "utf-8", errors="replace") as a:
set1 = set(a)

最新更新