Преобразование неправильно закодированных китайских символов в MySQL в UTF-8
У меня есть большая таблица MySQL, заполненная китайскими символами в неправильной кодировке. Я полагаю, что они должны были быть закодированы в latin1 (iso-8859-1), но я просто не могу найти способ получить китайские символы из содержимого строк базы данных.
Преобразование между latin1 и utf8 не помогает - поля остаются неизменными. Я пытался повторно импортировать базу данных с различными кодировками - всегда одинаковые результаты.
Некоторые примеры текущего содержимого и какими они должны быть:
惨事
должно быть惨事
ä
должно быть不
最
должно быть最
Я также пытался использовать Python, чтобы попытаться "расшифровать" содержимое, но снова безуспешно. Я пробовал различные комбинации этого:
databasefield.decode('iso-8859-1').encode('utf8')
Но я не могу заставить что-либо подобное работать.
Извините, что задал такой расплывчатый вопрос, но я просто не знаю, как продолжать пытаться понять это!
Кто-нибудь знает в чем здесь проблема?
1 ответ
Вместо этого вы смотрите UTF-8, декодированный как кодовая страница Windows 1252:
>>> print u'惨事'.encode('utf8').decode('cp1252')
惨事
>>> print u'最'.encode('utf8').decode('cp1252')
最
Исправление требует другого пути:
>>> print u'惨事'.encode('cp1252').decode('utf8')
惨事
>>> print u'最'.encode('cp1252').decode('utf8')
最
Там, возможно, были некоторые потери, так как кодировка UTF-8 для 不
использует кодовую точку, не поддерживаемую 1252:
>>> u'不'.encode('utf8')
'\xe4\xb8\x8d'
>>> print u'不'.encode('utf8').decode('cp1252')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mj/Development/venvs/stackru-2.7/lib/python2.7/encodings/cp1252.py", line 15, in decode
return codecs.charmap_decode(input,errors,decoding_table)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 2: character maps to <undefined>
Есть несколько других кандидатов на кодовые страницы Windows, которые можно попробовать здесь; 1254 приведет к аналогичному результату, например, с незначительными отличиями.