首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python pyodbc Unicode问题

Python pyodbc Unicode问题
EN

Stack Overflow用户
提问于 2015-04-05 22:21:17
回答 2查看 14.4K关注 0票数 7

我有一个字符串变量res,它是从pyodbc游标派生的,如底部所示。表test只有一行包含数据ä,其unicode代码点为u'\xe4'

我得到的结果是

代码语言:javascript
复制
>>> res,type(res)
('\xe4', <type 'str'>)

而我应该得到的结果是。

代码语言:javascript
复制
>>> res,type(res)
(u'\xe4', <type 'unicode'>)

我尝试将字符集作为utf-8添加到pyodbc连接字符串中,如下所示。结果现在被正确地设置为unicode,但代码点是用于其他字符串的,这可能是由于pyodbc驱动程序中的错误所致。

代码语言:javascript
复制
conn = pyodbc.connect(DSN='datbase;charset=utf8',ansi=True,autocommit=True)
>>> res,type(res)
(u'\ua4c3', <type 'unicode'>)

实际代码

代码语言:javascript
复制
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)

其他详细信息数据库: Teradata pyodbc版本: 2.7

那么我现在怎么做呢

1)将('\xe4', <type 'str'>)转换为(u'\xe4', <type 'unicode'>) (是否有可能在没有意外副作用的情况下执行此操作?)

2)解决pyodbc/unixodbc问题

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-08 01:28:26

我认为最好使用Python来处理这件事,而不是摆弄pyodbc.connect参数和特定于驱动程序的连接字符串属性。

'\xe4'是表示Latin-1 ä字符的unicode编码字符串。

要显式解码Python 2.7中的pyodbc结果:

代码语言:javascript
复制
>>> res = '\xe4'
>>> res.decode('latin1'), type(res.decode('latin1'))
(u'\xe4', <type 'unicode'>)
>>> print res.decode('latin1')
ä

Python3.x为您(str type includes unicode characters)做到了这一点:

代码语言:javascript
复制
>>> res = '\xe4'
>>> res, type(res)
('ä', <class 'str'>)
>>> print(res)
ä
票数 3
EN

Stack Overflow用户

发布于 2018-02-28 05:03:05

对于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')

等等。

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')

等等。

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')

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29458260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档