3

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 Info=False

CHARSET=uft8 は役に立たない

これらのシンボルを正しく表示するには、接続文字列やその他のパラメーターを変更するにはどうすればよいですか?

4

1 に答える 1

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」だけに置き換えられています

于 2013-12-20T15:08:06.237 に答える