2013-04-16 30 views
1

我有一組看起來包含以UTF-8和ISO-8859-1編碼的字符的文檔。我希望他們只是UTF-8編碼。如何在Python中處理UTF-8和ISO-8859-1字符的混合?

當我需要的文檔,並使用doc.decode('utf-8')我最終喜歡\u2022一些Unicode轉義序列進行譯碼後,UTF-8,但我也有很多像\xa0人物,我認爲是ISO-8859-1。我想將它們轉換爲它們的unicode等價物,因此所有事物都愉快地生活在一起。這可能嗎?我使用Python 2.74。

有一件事我所做的是這樣的:

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

,但也有像\xb7其他奇怪的字符 - 我想他們都一舉。

+0

沒有「UTF-8字符」這樣的東西。 UTF-8是*編碼*。 –

+1

U + 00A0是NO-BREAK SPACE; U + 00B7是MIDDLE DOT。這些是普通的Unicode字符:沒有必要嘗試將它們轉換爲「Unicode等價物」。 –

+0

@Gareth Rees我明白了...所以只是因爲轉義序列不是以'\ u'開頭並不意味着這些不是unicode? –

回答

1

的字符是一個編碼的不是排他性的財產,你不能說a是「一個UTF-8字符」,而b是在這個意義上和背景下,意味着沒有其他的編碼能夠表示的「ASCII字符」那些角色。

如果你的文件解碼爲UTF-8沒有錯誤,它是有效的UTF-8。它不可能是「UTF-8和ISO-8859-1的組合」。

0

作爲一個答案,其他問題你問含蓄:

如果你想字符U + 00A0,在視覺上無法區分空間,轉換爲一個空間,與許多其他一起轉換這種情況稱爲NFKC標準化。您可以使用unicodedata.normalize來完成:

import unicodedata 
new_doc = unicodedata.normalize('NFKC', decoded_doc)