2016-11-07 8 views
-1

О внесении запроса с PyODBC, я получаю мои табличные данные:Строка проблема кодирования с pyodbc вернулись данные

u'\u3836\u3431\u3132\u3230\u3030' 

Фактическое содержание в моей колонке базы данных как:

6814210200 

Когда я явно закодировать pyodbc «s возвращается значение utf-16, я получаю содержание как (ближе я пошел):

>>> print d['data'][0]['upc'].encode('utf-16') 
��6814210200 
#^^ two junks 

Мой вопрос: как я могу получить закодированное значение непосредственно из запроса PyODBC?

У меня уже есть CHARSET=UTF16 набор в моей строке подключения базы данных как:

pyodbc.connect("DRIVER=<driver_name>;" + \ 
           "SERVER=<server_ip>;" +\ 
           "DATABASE=<database>;" +\ 
           "UID=<user>;" +\ 
           "PWD=<password>;" + \ 
           "CHARSET=UTF16", # setting charset 
           ansi=True) 

и во всех моих odbc.ini и odbcinst.ini файла, я поставил:

UnicodeTranslationOption = utf16 
CharacterTranslationOption = all 

под установкой моего водителя.

+0

Есть ли какая-то особая причина, по которой вы используете UTF-16? Это не очень распространено и почти неслыханно в Linux-системах. Что произойдет, если вы установите «CHARSET = UTF8»? –

+0

Я не знаю, относится ли это к вашей конкретной ситуации (и я ничего не знаю о PyODBC), но в этой статье есть много хорошей информации о Unicode (как для Python 2 и Python 3): [Pragmatic Unicode] (http : //nedbatchelder.com/text/unipain.html), который был написан ветеран SO Нед Батчелдер. –

+0

@ PM2Ring '' CHARSET = UTF8 "' также возвращает тот же результат. Причина использования 'UTF-16' заключается в том, что я использую драйвер базы данных Nettezza, основанный на кодеке UTF-16. И спасибо за то, что вы разделили статью, мне это интересно. Посмотрите. –

ответ

2

Необходимо указать, что вы хотите использовать версию UTF-16 .

s = u'\u3836\u3431\u3132\u3230\u3030' 
print s.encode('utf-16le') 

выход

6814210200 

FWIW, в Python 3, s.encode('utf-16le') возвращает b'6814210200'.

+0

Я не хочу явно кодировать значение каждой строки и столбца, возвращаемого запросом PyODBC. Я ищу возможность указать кодировку в строке конфигурации/подключения PyODBC, которая неявно обрабатывает часть кодирования. Выполнение этого явно будет огромным над головой. Во всяком случае, +1 как часть запроса PyODBC, которую я добавил позже в вопросе. –

+3

В этом случае вам может потребоваться, чтобы все было выяснено на уровне базы данных. – holdenweb