首页 > 解决方案 > 如何在 Python3 中修复或删除格式错误的 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普通文本。

我看到\xE2\x80\x9D角色有关。在 python REPL 中,我可以手动创建一个这样的字节对象,将其解码为 utf-8,打印时它显示为我期望的字符。我不确定为什么在读取文件时无法正确理解字符。

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

最终,我的目标是用普通引号替换所有这些奇怪的引号。我可以想象有几种方法可以实现这一点,但它们都需要我以某种方式解决(或删除)xE2 X80字符,或者正确读取 3 字节\xE2\x80\x9D字符。

标签: pythonunicodeutf-8

解决方案


指定编码类型应该可以解决问题。你可以这样做,

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)

推荐阅读