#mysql #python #кодировка #python_3x #utf_8
При получении данных из таблицы MySQL (используя Connector/Python) текстовые строки имеют вид: Калашникова Елена Сергеевна и Тищенко Ð\x90ндрей ВаÑ\x81ильевич Декодер показывает, что это кодировка CP1252, поэтому в Python3 мы можем обработать их str.encode('cp1252').decode('utf8'), однако если этот метод работает для первой строки, то не работает для второй. UnicodeEncodeError: 'charmap' codec can't encode character '\x90' in position 16: character maps to undefined Проблема - в специальных символах \x90, \x9D, \x8F, \x8D, \x81. В описании Windows-1252 указано, что эти коды относятся к C1 control codes. Каким образом можно декодировать эти строки в Python3, не изменяя базу MySQL? Или где ещё может быть источник проблемы?
Ответы
Ответ 1
Нашёл ответ!) При импорте базы данных нужно использовать кодировку latin1 Тогда в Python3 для декодирования таких строк необходимо выполнить str.encode('latin1').decode('utf8'). На решение натолкнула эта статья - Solving Latin1 and UTF8 errors for good in Ruby: Latin1 is a character encoding used by MySQL. People mistakenly think it is equivalent to ISO-8859-1 but it isn’t, it’s actually CP-1252 (also known as Windows-1252). CP-1252 is a superset of ISO-8859-1 with some additional characters (recently including the € symbol). Соответcnвенно, я нашёл в списке поддерживаемых кодировок latin1, и использовал её при подключении к MySQL с помощью Connector/Python.
Комментариев нет:
Отправить комментарий