PyODBC输出不正确的UTF-16编码。

8
我将尝试从一个MySQL数据库中提取出表名列表,相关代码如下所示:
```html

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

```
conn = pyodbc.connect('...')
cursor = conn.cursor()
for table in cursor.tables():
    print table.table_name

对于每个表格,它都会打印一堆无意义的字符(方框和菱形内的问号)。使用repr(table.table_name)它会打印:

u'\U00500041\U004c0050\U00430049\U00540041\U004f0049'

针对名为"APPLICATION"的表,如果您将每个32位字符视为两个16位字符,则可以得到字符串"PALPCITAOI"。交换字符对(1和2,3和4等),它会产生"APPLICATIO"(缺少"N")。假设它交换了"N"和空字符,导致缺少"N"(假设是以空字符结尾的字符串)。
如何正确获取表名?
此代码运行在Python 2.4、PyODBC 2.1和MySQL 5.0.22环境下。

我找不到适用于Linux(CENTOS 5.1)的更新的32位PyODBC版本,但我在这里找到了源代码[http://code.google.com/p/pyodbc/downloads/list]。有人知道我能在哪里找到PyODBC的较新的32位RPM版本吗? - Jonathan
@Thomas K,我尝试将CHARSET=UTF8添加到我的连接字符串中,如:cnxn = pyodbc.connect('DSN=localhost;CHARSET=UTF8'),并且这在解决了其中一个问题区域上起了作用。感谢你的帮助! - Jonathan
2个回答

5

将CHARSET=UTF8添加到连接字符串中可以解决问题,现在我已经成功运行了应用程序。例如:

更改

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

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

感谢Thomas指出正确的方向。升级到较新版本的PyODBC也可能有效。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接