Получить строки UTF8 из удаленной БД - PullRequest
1 голос
/ 24 декабря 2010

Мое приложение загружает некоторые данные из удаленной базы данных MySQL.Проблема в том, что db хранит строки как utf8.Но данные, которые я получаю, расшифрованы.Как обойти это?

Код:

cursor = conn.cursor()
query = """MY QUERY HERE"""
cursor.execute(query)
result = cursor.fetchall()

Ответы [ 4 ]

2 голосов
/ 25 декабря 2010

Возможно, пример в порядке - здесь я создаю строку юникода "u", кодирую ее как utf8, декодирую ее из utf8 обратно в строку юникода, кодирую ее как ascii (которая выдает исключение, поскольку расширенный символ вэта строка не может быть закодирована как ascii), затем, наконец, закодирована как ascii, заменяя ошибки на «?»:

Python 2.6.4 (r264:75706, Dec  7 2009, 18:43:55) 
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> u = u'abc\u2020123'
>>> u
u'abc\u2020123'
>>> u.encode('utf8')
'abc\xe2\x80\xa0123'
>>> s = _
>>> s.decode('utf8')
u'abc\u2020123'
>>> u.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2020' in position 3: ordinal not in range(128)
>>> u.encode('ascii', 'replace')
'abc?123'
>>>

Предположительно, вы получаете строки utf8 из БД, вам следует декодировать этиот utf8 до строки Unicode, затем, вероятно, перекодируйте их на выходе для того, что потребляет выходные данные вашей программы ... Как правило, вы хотите модель что-то вроде:

  1. Входные данные - преобразование извходная кодировка в Unicode [string.decode ('utf8')] *
  2. Обработка данных - работа только с объектами Unicode
  3. Выходной результат - преобразование из Unicode в выходную кодировку [string.encode ('utf8')]

Это дает вам четкое разделение кодирования / декодирования и позволяет избежать распространения кода обработки кодирования по всему вашему приложению, посколькуядро работает только с юникодом.

0 голосов
/ 28 декабря 2010

сделайте conn.set_character_encoding('utf8') перед запросом из базы данных.

0 голосов
/ 24 декабря 2010

просто установите ваш питон в кодировку utf-8, и вам больше не придется беспокоиться.У меня была эта проблема с db2 / mongodb для загрузки данных.

просто установите код по умолчанию для utf-8 в site.py.

посмотрите @ http://blog.ianbicking.org/illusive-setdefaultencoding.html

0 голосов
/ 24 декабря 2010

Возможно, вы захотите попробовать string.encode('ascii').decode('utf-8')?

...