如何在Python中处理混合的UTF-8和ISO-8859-1字符?

时间:2013-04-16 21:57:31

标签: unicode python-2.7 character-encoding python-unicode

我有一组文档似乎包含以UTF-8和ISO-8859-1编码的字符。我希望它们只是UTF-8编码。

当我使用doc.decode('utf-8')获取文档并将其解码为UTF-8时,我最终得到了一些像\u2022这样的unicode转义序列,但我也有很多像\xa0这样的字符我相信是ISO-8859-1。我想把它们转换成它们的unicode等价物,所以一切都快乐地生活在一起。这可能吗?我正在使用Python 2.74。

我做过的一件事是:

decoded_doc = doc.decode('utf-8')
new_doc = decoded_doc.replace(u'\xa0',u' ')

但是还有其他一些奇怪的角色,比如\xb7 - 我想一下子全部拿到它们。

2 个答案:

答案 0 :(得分:1)

字符不是编码的专有属性,你不能说a是“UTF-8字符”,而b是意义和上下文中的“ASCII字符”意味着没有其他编码能够代表这些角色。

如果您的文件解码为UTF-8且没有错误,则它是有效的UTF-8。它不可能是“UTF-8和ISO-8859-1的混合”。

答案 1 :(得分:0)

作为对另一个问题的回答,你隐含地问:

如果您希望将与空间在视觉上无法区分的角色U + 00A0转换为空格,以及该类别的许多其他转换,则称为NFKC规范化。您可以使用unicodedata.normalize

完成此操作
import unicodedata
new_doc = unicodedata.normalize('NFKC', decoded_doc)