首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyODBC输出不正确的UTF-16

问PyODBC输出不正确的UTF-16
EN

Stack Overflow用户
提问于 2012-03-29 00:17:16
回答 2查看 4.9K关注 0票数 8

我正在尝试从MySQL数据库中提取一个表名列表。代码的相关部分如下:

代码语言:javascript
复制
conn = pyodbc.connect('...')
cursor = conn.cursor()
for table in cursor.tables():
    print table.table_name

对于每个表,它打印一堆乱码字符(方框和菱形问号)。它使用repr(table.table_name)打印:

代码语言:javascript
复制
u'\U00500041\U004c0050\U00430049\U00540041\U004f0049'

用于名为"APPLICATION“的表。

如果将每个32位字符视为两个16位字符,则会得到字符串"PALPCITAOI“。交换字符对(1和2、3和4等)它生成"APPLICATIO“(缺少"N")。大概,它交换了N和null字符,导致缺少N(假设字符串以null结尾)。

怎样才能正确地得到表名呢?

它在Python2.4、PyODBC 2.1和MySQL 5.0.22下运行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-03 04:11:11

向连接字符串添加CHARSET=UTF8起作用了,现在我已经启动并运行了应用程序。例如:

变化

cnxn = pyodbc.connect('DSN=localhost')

至

cnxn = pyodbc.connect('DSN=localhost;CHARSET=UTF8')

谢谢你,托马斯,给我指了个正确的方向。升级到更高版本的PyODBC也可以。

票数 5
EN

Stack Overflow用户

发布于 2013-05-05 02:26:44

这是一个已知问题,已在pyodbc 2.1.8中修复:

https://code.google.com/p/pyodbc/issues/detail?id=78&can=1&q=UTF-16

不幸的是,对于Ubuntu LTS用户来说,精准穿山甲的可用版本是2.1.7,这个问题仍然存在。如果你想继续使用LTS,我已经向后移植了pyodbc 3.0.6 -你可以在这里找到它:

https://launchpad.net/~gazoakley/+archive/precise-backports

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

https://stackoverflow.com/questions/9911662

复制
相关文章

相似问题

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