rog*_*one 6 python unicode odbc utf-8 pyodbc
我有一个字符串变量 res,它是从 pyodbc 游标派生的,如底部所示。该表test有一行数据,ä其 unicode 代码点为u'\xe4'。
我得到的结果是
>>> res,type(res)
('\xe4', <type 'str'>)
Run Code Online (Sandbox Code Playgroud)
而我应该得到的结果是。
>>> res,type(res)
(u'\xe4', <type 'unicode'>)
Run Code Online (Sandbox Code Playgroud)
我尝试将字符集作为 utf-8 添加到我的 pyodbc 连接字符串中,如下所示。结果现在已正确设置为 unicode,但代码点用于其他字符串?,这可能是由于 pyodbc 驱动程序中可能存在的错误。
conn = pyodbc.connect(DSN='datbase;charset=utf8',ansi=True,autocommit=True)
>>> res,type(res)
(u'\ua4c3', <type 'unicode'>)
Run Code Online (Sandbox Code Playgroud)
实际代码
import pyodbc
pyodbc.pooling=False
conn = pyodbc.connect(DSN='datbase',ansi=True,autocommit=True)
cursor = conn.cursor()
cur = cursor.execute('SELECT col1 from test')
res = cur.fetchall()[0][0]
print(res)
Run Code Online (Sandbox Code Playgroud)
其他详细信息 数据库:Teradata pyodbc 版本:2.7
那么我现在如何
1)投射('\xe4', <type 'str'>)到(u'\xe4', <type 'unicode'>)(是否可以在没有无意副作用的情况下做到这一点?)
2) 解决 pyodbc/unixodbc 问题
Fer*_*ezi 13
对于 Python 3,请尝试以下操作:
后conn = pyodbc.connect(DSN='datbase',ansi=True,autocommit=True)
放置这个:
conn.setdecoding(pyodbc.SQL_CHAR, encoding='utf8')
conn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf8')
conn.setencoding(encoding='utf8')
或者
conn.setdecoding(pyodbc.SQL_CHAR, encoding='iso-8859-1')
conn.setdecoding(pyodbc.SQL_WCHAR, encoding='iso-8859-1')
conn.setencoding(encoding='iso-8859-1')
ETC...
Python 2:
cnxn.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
cnxn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
cnxn.setencoding(str, encoding='utf-8')
cnxn.setencoding(unicode, encoding='utf-8')
ETC...
cnxn.setdecoding(pyodbc.SQL_CHAR, encoding='encode-foo-bar')
cnxn.setdecoding(pyodbc.SQL_WCHAR, encoding='encode-foo-bar')
cnxn.setencoding(str, encoding='encode-foo-bar')
cnxn.setencoding(unicode, encoding='encode-foo-bar')
我认为最好用 Python 来处理这个问题,而不是摆弄pyodbc.connect参数和特定于驱动程序的连接字符串属性。
\n\n\'\\xe4\'是表示 unicode \xc3\xa4字符的Latin-1编码字符串。
要在 Python 2.7 中显式解码 pyodbc 结果:
\n\n>>> res = \'\\xe4\'\n>>> res.decode(\'latin1\'), type(res.decode(\'latin1\'))\n(u\'\\xe4\', <type \'unicode\'>)\n>>> print res.decode(\'latin1\')\n\xc3\xa4\nRun Code Online (Sandbox Code Playgroud)\n\nPython 3.x 为您执行此操作(str类型包括 unicode 字符):
>>> res = \'\\xe4\'\n>>> res, type(res)\n(\'\xc3\xa4\', <class \'str\'>)\n>>> print(res)\n\xc3\xa4\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
13509 次 |
| 最近记录: |