python - 如何在 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
字符。
解决方案
指定编码类型应该可以解决问题。你可以这样做,
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)
推荐阅读
- c# - 如何绘制一个图,其中每个顶点都是给定大小的矩形,但边可以是任意长度?
- delphi - Delphi服务启动方法
- python-3.x - 用 Python 运行 sed 命令不像在 bash 中那样工作?
- python - 与 UNWIND 合并问题 Neo4j
- mysql - 查询相同user_id的不同meta_key下的重复meta_value
- office-js - Office-JS 许可证:哪一个适用?
- git - 致命:pathspec 'file-name' 不匹配任何文件。文件名不是路径
- c++ - 如何压缩此代码?if 语句过多
- javascript - Yarn create-react-app 不要创建 upath 模块
- python - 需要找到 cnfusion matrix,accuracy,recall,f1 score。我的代码显示 'LabelBinarizer' 对象没有属性 'classes_