1

ODBC接続を使用して、Pythonを使用してMSSQLデータベースからデータを抽出しています。次に、xlwt を使用して、抽出したデータを Excel ファイルに入れようとしています。

ただし、これにより次のエラーが生成されます。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd8 in position 20: ordinal not in range(128)

スクリプトを実行してデータを印刷しただけで、データベース内の問題のある文字がスラッシュ付きの O であることを確認しました。Python の印刷では、「\xd8」と表示されます。

xlwt のワークシート エンコーディングは UTF-8 に設定されています。

これを直接 Excel に取り込む方法はありますか?

編集

以下の完全なエラーメッセージ:

C:\>python dbtest1.py
Traceback (most recent call last):
  File "dbtest1.py", line 24, in <module>
    ws.write(i,j,item)
  File "build\bdist.win32\egg\xlwt\Worksheet.py", line 1032, in write
  File "build\bdist.win32\egg\xlwt\Row.py", line 240, in write
  File "build\bdist.win32\egg\xlwt\Workbook.py", line 309, in add_str
  File "build\bdist.win32\egg\xlwt\BIFFRecords.py", line 25, in add_str
  File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode 
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd8 in position 20: invalid
continuation byte
4

2 に答える 2

4

ワークブックのエンコーディングを「latin-1」に設定すると、同じことが達成されたようです。

wb = xlwt.Workbook(encoding='latin-1') 

(以前は「UTF-8」に設定されていました)

文字列ではない他のフィールドがあったため、私の場合、他の答えは機能しませんでした。

于 2012-07-19T09:10:21.270 に答える
-1

SQL 抽出は、ASCII を使用してエンコードされた文字列を返しているようです。次の方法でユニコードに変換できます。

data = unicode(input_string, 'latin-1')

次に、それらを xlwt を使用してスプレッドシートに入れることができます。

于 2012-07-18T14:29:05.790 に答える