pyodbc返回由拉丁语替换的unicode符号

时间:2012-07-26 14:33:49

标签: python unicode odbc

使用Python和pyodbc 连接到Transbase源码时(连接字符串是正确的并且可以在其他应用程序中使用),我看到像ó,ű,é,á这样的符号转换为o,u,e ,a。

但是如果我通过ODBC从MS Access连接到相同的源,则这些符号会正确显示。如果我从pyodbc连接到MS Access(与mdb文件中的Transbase源链接),则符号会正确显示。

  

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = c:\ 1.mdb; Persist Security   信息=假

CHARSET = uft8无效

如何更改连接字符串或其他参数以正确显示这些符号?

1 个答案:

答案 0 :(得分:1)

您的问题中有一些变量很难做出好的答案。您要查询的数据库使用什么字符编码非常重要。看来你的替换字符不能用等效的拉丁字符找到。

使用与数据库相同的编码对查询的返回进行编码,或者以对ó,ű,é,á具有相应字符的编码进行编码将是一个开始。所以:

query_result = cursor.execute(sql)
data = query_result[0].encode('utf8',errors='strict')
如果在您选择的编码中找不到该字符,则

errors ='strict'将导致错误(上例中为utf8)。这可能有助于您找到正确的数据库编码。

从结果中你可以看到你现在拥有的代码就是:

data = query_result[0].encode('utf8',errors='replace')

哪个会用“合适的”替代品替换它找不到的字符。所以ó被替换为“0”