2017-12-05 97 views
0

私はアクセスデータベースからテーブルのリストを取得しようとしています。スクリプトが通過し、約3分の1のテーブルが表示され、次のエラーが表示されます。UnicodeDecodeError: 'utf-16-le'

Traceback (most recent call last): File "C:/GageInfo/sourcecode for GageTrakNotify/__test script.py", line 31, in for fld in cursor2.columns(rows.table_name): UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 132-133: illegal encoding

ヒントがあります。

+0

最後の正常な印刷を識別するには、現在のコードの出力を使用し、Access自体でデータベースを開き、エラーの原因となっている列名(またはテーブル名)を決定するためにデザインビューでテーブルを確認します。それから、あなたの質問を編集してください。 –

答えて

0

テーブル名のどこかにUnicode(ASCII以外)が埋め込まれているようです。考え出す何それはケースだかではないが、最終的にあなたはPythonスクリプトは単なる文字列decode方法で行うことができユニコード、扱いするかどうかを確認する上での停止の食卓:これはどこでも行われるべき

for fld in cursor2.columns(rows.table_name.decode('utf-16-le')): 

をUnicode文字が切り詰められる可能性があります(たとえば、列名も同様です)。

+0

テーブル/カラム名のUnicode文字は問題ありません。私はPython 3.6の下でpyodbc 4.0.21をテストしました。この質問のコードは、Access 2010 ODBCドライバを使ってカラム名 '[pile of]'を正しく表示します。 (絵文字はBMPの外にあるので、ODBCドライバとpyodbcがUTF-16サロゲートペアを処理できることが証明されています) –

+0

合意、@GordThompson。 'print'文(今はPython 3で機能しています)がそれを処理できます。そのため、コード内の' print(rows.table_name) 'がうまく動作していると思います。私が経験したことは、インポートされたモジュールに関連するオブジェクト(およびそれらに付随するメソッド)がUnicodeエンコーディングを処理できないことがあります。そのため、おそらく 'cursor2.columns(rows.table_name)'がエラーになっていると思います。私は最近、Excelファイルに書き込むためのモジュールでこれに遭遇しました。私が書いていたものに 'デコード 'を最初に適用しない限り、書き込めませんでした。 –

+0

私はこれを試しましたが、オブジェクトに属性 'デコード'がないというエラーが発生しています。 –

0

ヒントとフィードバックありがとうございます。私は、リスト内の情報をキャプチャして結果を出力し、tryステートメントを使用してエラーを処理し、正しいUnicodeを適用することで解決しました。

あなたの提案は正しい方向に私を指摘しました。