pyodbc返回数据的字符串编码问题

时间:2016-11-07 06:29:45

标签: python encoding ubuntu-14.04 pyodbc string-decoding

在使用PyODBC进行查询时,我将表格数据设为:

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

我的数据库列中的实际内容如下:

 6814210200

当我明确地将pyodbc的返回值编码为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.iniodbcinst.ini文件中,我设置了:

 UnicodeTranslationOption = utf16 
 CharacterTranslationOption = all

在我司机的设定下。

1 个答案:

答案 0 :(得分:2)

您需要指定您需要little endian版本的UTF-16。

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

<强>输出

6814210200

FWIW,在Python 3中,s.encode('utf-16le')返回b'6814210200'