2014-10-21 5 views
5

Моя строка Niệm Bồ Tát (Thiá»n sÆ° Nhất Hạnh) и я хочу расшифровать его Niệm Bồ Tát (Thiền sư Nhất Hạnh) я вижу на этом сайте может сделать это http://www.enderminh.com/minh/utf8-to-unicode-converter.aspxPython Как исправить сломанную кодировку utf-8?

и я начинаю пробовать на Python

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

, но на самом деле это не правильно, потому что Исходная строка - utf-8, но строка show не является ожидаемым результатом.

Примечание: это вьетнамский персонаж.

Как разрешить этот случай? Это Windows Unicode или что-то еще? Как определить кодировку здесь. Заранее спасибо

+1

выглядит, как он был закодирован как 'UTF-8' но интерпретируется как 'Latin-1'. – ch3ka

+1

'>>>« Niệm Bồ Tát (Thiền sư Nhất Hạnh) ». Encode ('utf-8'). Decode ('latin-1')' '' Niá »\ x87m Bá» \ x93 Tát (Thiá »\ x81n sÆ ° NhẠ¥ t Hạnh) '' довольно близко ... – ch3ka

+3

@ ch3ka, его фактически cp1252, надмножество латинского-1 –

ответ

7

Я не уверен, что вы можете сделать с таким родом данных, но для примера в исходном сообщении, это работает:

>>> 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

Кодировка, используемая для управления этими данными, была, скорее всего, cp1252, поэтому использование этого вместо латинского-1 позволит вам восстановить больше (хотя и не всех) символов. Ni m B Tát (Thi n sư Nhất Hạnh) против Niệm Bồ Tát (Thi n sư Nhất Hạnh) –

+0

Я знаю это в python3, но как насчет в python2? – giaosudau

+0

@sepdau Мой пример был с Python 2.7 на Linux :) –

7

Единственное, что помог мне с неработающим cyrillic string - https://github.com/LuminosoInsight/python-ftfy

Этот модуль исправляет почти все и работает намного лучше, чем онлайн-декодеры.

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

Он может быть легко установлен с помощью pip install ftfy

+0

, если я использую «из ftfy import fix_encoding», хотя это помогло мне устранить проблему, с которой я столкнулся в отношении UTF-8, мой код занимает слишком много времени, чтобы дать мне результат – javac

+0

. Он работал для меня, чтобы исправить проблемы с кодированием в html с помощью lxml ЛИЭС. Удивительно работала с первой попытки. Спасибо – rodrigorf

+0

@rodrigorf спасибо, должен пойти в lib creator =) Star repo –

Смежные вопросы