2016-06-18 2 views
1

У меня есть система, которую я создаю, которая вставляет строки в базу данных MySQL через запросы POST (API, встроенный в Flask/Python). В некоторых рядах есть акценты. В частности, у меня есть строка, в которой есть имя Péter. Результат в коде, когда я делаю SELECT для БД в моем коде, равен P\xc3\xa9ter. Это потребовало от меня выполнения некоторой работы в отношении кодировки символов. Когда я делаю запрос GET, я вытягиваю данные и пытаются выводить их в качестве ответа JSON, но получаю эту ошибку:Обработка символов с акцентом Python/MySQL

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 1: invalid continuation byte 

Другие запросы GET прекрасны по строкам без акцентов, так что я начал, чтобы изолировать его вниз к этому вопросу.

Я использую экземпляр Amazon RDS в качестве моей базы данных MySQL. По умолчанию экземпляры RDS кодируются латином-1. Я входил и обновлял свои группы параметров, и теперь все выглядит как utf-8. Вот мой характер и сортировки переменных:

+--------------------------+-------------------------------------------+ 
| Variable_name   | Value          | 
+--------------------------+-------------------------------------------+ 
| character_set_client  | utf8          | 
| character_set_connection | utf8          | 
| character_set_database | utf8          | 
| character_set_filesystem | binary         | 
| character_set_results | utf8          | 
| character_set_server  | utf8          | 
| character_set_system  | utf8          | 
| character_sets_dir  | /rdsdbbin/mysql-5.6.27.R1/share/charsets/ | 
+--------------------------+-------------------------------------------+ 
8 rows in set (0.00 sec) 

+----------------------+-----------------+ 
| Variable_name  | Value   | 
+----------------------+-----------------+ 
| collation_connection | utf8_general_ci | 
| collation_database | utf8_unicode_ci | 
| collation_server  | utf8_unicode_ci | 
+----------------------+-----------------+ 
3 rows in set (0.00 sec) 

Я перезагрузил экземпляр и даже перезарядил всю базу данных. Как дополнительное разъяснение, я запускаю этот API локально в своей базе данных MySQL, и он работает нормально (что снова заставляет меня думать, что это кодирование, потому что вся база данных была импортирована непосредственно из моей версии localhost).

Я не совсем уверен, каким будет мой следующий шаг для устранения этой проблемы. Возможно ли, что он неправильно сохраняет его в БД? Я не делаю никакой кодировки, прежде чем вставлять ее в БД. Символ появляется в виде é в БД, когда я делаю инструкцию SELECT на нем из командной строки (должен ли он каким-то образом быть закодирован в БД)?

Благодарим за помощь!

ответ

2

Для всех, у кого есть эта проблема, мне просто нужно было установить charset = 'utf8' в моей строке подключения (явно задана кодировка). Я пробовал кодировать строки в коде и т. Д., Но это сразу сделало трюк.