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.ini
和 odbcinst.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'
.
在使用 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.ini
和 odbcinst.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'
.