проблемы кодирования между python и mysql - PullRequest
0 голосов
/ 13 января 2012

У меня странная проблема с кодированием из моего приложения PyQt в моей базе данных mysql. Я имею в виду странность в том смысле, что это работает в одном случае, а не в другом, хотя, похоже, я делаю одно и то же для всех.

Мой процесс следующий:

У меня есть несколько элементов QFocusOutTextEdit, в которых я пишу текст, возможно содержащий акценты и прочее (é, à, è, ...)

Я получаю текст, написанный на:

    text = self.ui.text_area.toPlainText()
    text = text.toUtf8()

Затем, чтобы вставить его в мою базу данных, я делаю:

text= str(text).decode('unicode_escape').encode('iso8859-1').decode('utf8')

Я также установил набор символов моей базы данных, конкретные таблицы и определенные столбцы таблицы в utf8.

Он работает для одной из моих текстовых областей, а для других он помещает странные символы вместо этого в мою базу данных.

Любая подсказка приветствуется!

РЕШЕНО: извините за беспокойство, по-видимому, в моей базе данных были некоторые поля, которые не были обновлены, и это каким-то образом блокировало процесс кодирования.

1 Ответ

2 голосов
/ 13 января 2012

Вы делаете много кодирования, декодирования и перекодирования, за которыми трудно следить, даже если вы знаете, что все это значит.Вы должны попытаться упростить это до простой работы со строками Unicode.В Python 3 это означает str (обычные строки), а в Python 2 это означает unicode (u"this kind of string").

Организовать подключение к базе данных MySQL для использования Unicode на входе и выходе.Если вы используете что-то на высоком уровне, такое как Sqlalchemy, вам, вероятно, не нужно ничего делать.Если вы используете MySQLdb напрямую, убедитесь, что вы передаете charset="UTF8" (что подразумевает use_unicode) методу connect().

Затем убедитесь, что значение, которое вы получаете из PyQT, является значением Unicode.Я не знаю PyQT.Проверьте тип self.ui.text_area или self.ui.text_area.toPlainText().Надеюсь, это уже строка Unicode.Если да, то все готово.Если нет: это байтовая строка, которая, вероятно, закодирована в UTF-8, поэтому вы можете декодировать ее с помощью theresult.decode('utf8'), что даст вам объект Unicode.

Как только ваш код будет иметь дело со всеми объектами Unicode и не болеезакодированные строки байтов, вам больше не нужно выполнять какие-либо виды кодирования или декодирования.Просто передайте строки напрямую из PyQT в MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...