使用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无效
如何更改连接字符串或其他参数以正确显示这些符号?
答案 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”