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

String encoding issue with pyodbc's returned data

在使用 PyODBC 进行查询时,我得到的 table 数据为:

 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

在我的驱动程序设置下。

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

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

输出

6814210200

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