2014-10-21 14 views
5

mój ciąg jest Niệm Bồ Tát (Thiá»n sÆ° Nhất Hạnh) i chcę dekodować go do Niệm Bồ Tát (Thiền sư Nhất Hạnh) widzę w tym miejscu może to zrobić http://www.enderminh.com/minh/utf8-to-unicode-converter.aspxPython Jak naprawić uszkodzone kodowanie utf-8?

i zacznę próbować przez Python

mystr = '09. Bát Nhã Tâm Kinh' 
mystr.decode('utf-8') 

ale faktycznie nie jest prawidłowe, ponieważ oryginalny ciąg to utf-8, ale pokaz ciągów nie jest moim oczekiwanym rezultatem.

Uwaga: jest to wietnamski charakter.

Jak rozwiązać tę sprawę? Czy to jest Windows Unicode czy coś? Jak wykryć kodowanie tutaj. góry dzięki

+1

wygląda jakby został zakodowany jako 'UTF-8' jednak interpretować jako' latin-1 '. – ch3ka

+1

'>>>" Niệm Bồ Tát (Thiền sư Nhất Hạnh) ". Encode ('utf-8') .dodode (" latin-1 ') ' '' Niá »\ x87m Bá» \ x93 Tát (Thiá »\ x81n sÆ ° NhẠ¥ t Hạnh)' 'całkiem blisko ... – ch3ka

+3

@ ch3ka, faktycznie cp1252, nadzbiór łacińskiego-1 –

Odpowiedz

7

Nie jestem pewien, co można zrobić z tego rodzaju danych, ale dla przykładu w oryginalnym poście, to działa:

>>> mystr = '09. Bát Nhã Tâm Kinh' 
>>> s = mystr.decode('utf8').encode('latin1').decode('utf8') 
>>> s 
u'09. B\xe1t Nh\xe3 T\xe2m Kinh' 
>>> print(s) 
09. Bát Nhã Tâm Kinh 
+3

Kodowanie użyte do zmapowania tych danych było najprawdopodobniej cp1252, więc użycie tego zamiast łacińskiego-1 pozwoli ci odzyskać więcej (choć nie wszystkich) znaków. Ni m B Tát (Thi n sư Nhất Hạnh) vs Niệm Bồ Tát (Thi n sư Nhất Hạnh) –

+0

Znam go w python3, ale co z python2? – giaosudau

+0

@sepdau Mój przykład był z Pythonem 2.7 na Linuksie :) –

7

Jedyną rzeczą, która pomogła mi złamany cyrylica - https://github.com/LuminosoInsight/python-ftfy

Ten moduł naprawia wszystko i działa znacznie lepiej niż dekodery online.

>>> from ftfy import fix_encoding 
>>> mystr = '09. Bát Nhã Tâm Kinh' 
>>> fix_encoding(mystr) 
'09. Bát Nhã Tâm Kinh' 

To można łatwo zainstalować za pomocą pip install ftfy

+0

jeśli używam "from ftfy import fix_encoding", chociaż pomógł mi rozwiązać problem związany z UTF-8, mój kod zajmuje zbyt dużo czasu, aby dać mi wynik. – javac

+0

To działało dla mnie, aby rozwiązać problemy z kodowaniem w html przy użyciu lxml libs. Zadziwiająco działało w pierwszej próbie. Dzięki – rodrigorf

+0

@rodrigorf dzięki powinno pójść do lib creator =) Star repo –