-1

在使用 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.ini文件odbcinst.ini中,我设置了:

 UnicodeTranslationOption = utf16 
 CharacterTranslationOption = all

在我的驱动程序设置下。

4

1 回答 1

2

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

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

输出

6814210200

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

于 2016-11-07T06:49:47.857 回答