python - 将非ASCII字符转换为特定字符

0 投票
1 回答
1213 浏览
提问于 2025-04-18 10:55

大家好,感谢你们的时间!

我有一些使用 iso-8859-1 编码的 HTML 文件,里面用 HTML 实体代替了非 ASCII 字符,这样处理还不错。除了一个字符:œ(这是它的 Unicode 编码,万一显示不出来我就写上了)。我想把它转换成 "oe",这样就能去掉它了。

我已经尝试过:

iconv -f iso-8859-1 -t ascii//translit

但是这个方法把那个问题字符直接去掉了,什么都没替换上。

我用的是 Python 2.7,试过很多关于解码、编码和 codecs 的方法,但一直没能解决。现在我的代码是这样的:

i=0
for file in os.listdir(dir_in):
i+=1
file=codecs.open(dir_in+file,"r","iso-8859-1")
out=codecs.open(dir_out+str(i)+".html","w","utf-8")
    for line in file:
            #at this point the type of line is "unicode"
    line=line.decode("iso-8859-1",errors="replace")
            out.write(line)
file.close
out.close

(我在显示缩进时遇到了一些麻烦,不过我保证这一部分是没问题的)我得到了一个 "ascii codec cant encode character u\x9c" 的错误。我不确定我是不是正确使用了解码。

我还尝试过:

line=unicode(line)

这个方法去掉了那个字符,但没有替换上(我想这就是它应该做的)。

line=unicode(line, errors="replace")

这个方法给了我 "TypeError : decoding Unicode is not supported" 的错误。我想这两个方法不成功是因为我不应该把已经是 Unicode 的东西再给 "unicode"。

如果你有简单的方法可以在 bash 或 perl 中实现,我也很感兴趣,但我不能用 Python 3,因为服务器不支持它。

非常感谢!

1 个回答

0

你能在尝试写这个字符之前,先把它替换掉吗?

line = line.replace(u"\x9c", "oe")

撰写回答