Санитарная обработка кодированных строк UTF-8 - PullRequest
1 голос
/ 24 декабря 2011

Я хочу санировать строку в кодировке UTF-8, прежде чем использовать ее как часть инструкции MySQL SELECT.

Например, у меня есть:

query = MySQLdb.escape_string(query)

но эта строка приводит к возбужденному исключению, которое гласит

Кодек 'ascii' не может кодировать символы в позиции 0-2: порядковый номер не в Диапазон (128).

Как я могу справиться с этим?

Ответы [ 3 ]

3 голосов
/ 24 декабря 2011

В вашем примере query имеет тип 'str'.Если вы поместите 'u' перед строкой, она станет типа 'unicode'.

>>> query = "こうえん"
>>> print type(query)
<type 'str'>
>>> query = u"こうえん"
>>> print type(query)
<type 'unicode'>

Это одно из основных отличий между версиями Python 2.x и 3.x.Начиная с версии 3.0, все строки по умолчанию являются «Юникод».

3 голосов
/ 25 декабря 2011

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

Теперь ваш вход не может быть закодирован в ASCII, поэтому вам просто нужно указать python, какую кодировку он должен использовать: utf-8.

Вы можете достичь этого, используя query = query.encode('utf-8').

0 голосов
/ 24 декабря 2011
query = "こうえん"
query = MySQLdb.escape_string(unicode(query,'utf-8'))
...