如何在Python3中修复或删除格式错误的utf-8字符

时间:2019-08-04 14:17:23

标签: python unicode utf-8

我有几个文本文件,其中包含python 3无法处理的字符。最麻烦的地方似乎是“结束”引号。

我尝试使用以下方式读取文件:

with open(filename, 'r', errors='backslashreplace') as file:
    text = file.read()
with open(filename, 'w', errors='backslashreplace') as file:
    file.write(text)

,然后在Notepad ++中打开文件查看字符时,我突出显示xE2 x80来表示非文本字符,然后是普通文本中的\x9d

我看到this处理着\xE2\x80\x9D字符。在python REPL中,我能够像这样手动创建一个字节对象,将其解码为utf-8,并在打印时显示为我期望的字符。我不确定为什么在读取文件时无法正确理解字符。

当读取文件时出现ignore错误而不是backslashreplace时,我仍然出现xE2 X80字符,而且我还没有弄清楚如何执行字符串操作来删除它们。

最终,我的目标是将所有这些奇怪的引号替换为普通引号。我可以想像有几种方法可以完成此操作,但是它们都要求我以某种方式寻址(或删除)xE2 X80字符,或正确读取3个字节的\xE2\x80\x9D字符。

1 个答案:

答案 0 :(得分:1)

指定编码类型可以解决此问题。您可以这样做,

with open(filename, 'r', encoding='utf8', errors='backslashreplace' ) as file:
    text = file.read()
with open(filename, 'w', encoding='utf8', errors='backslashreplace') as file:
    file.write(text)