Python:替换文本文件中的不寻常字符
2021-06-30
826
我尝试在文本文件中自动进行以下更改/替换。
â€\u9d = "
“ = "
’ = '
— = :
我不断遇到以下错误:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 452: character maps to <undefined>
这是我最近的代码:
fin = open("example.md", "rt")
data = fin.read()
data = data.replace(r'â€\u9d', '\"')
data = data.replace(r'“', '\"')
data = data.replace(r'’', '\"')
data = data.replace(r'—', ':')
fin.close()
fin = open("data.txt", "wt")
fin.write(data)
fin.close()
2个回答
您有两个问题。首先,您使用错误的编码打开文件,导致出现 mojibake 的情况,正如 @JosefZ 在评论中建议的那样。解决方案与他建议的完全一样:
fin = open("example.md", "rt", encoding="utf-8")
第二个问题是,您使用了一种非常笨拙的方式来纠正第一个问题。您可能会发现,一旦您正确读取字符,就无需修复它们。但是如果您仍然需要将花括号转换为直引号,以便所有内容都与 ASCII 兼容,那么使用
unidecode
模块
可以更轻松地完成此操作。
from unidecode import unidecode
data = unidecode(data)
这将处理您问题中列出的所有字符,以及更多其他字符。
Mark Ransom
2021-07-01