6

日本語の文字を含む Excel ファイルにデータを書き込もうとしています。データを取得するために codec.open() を使用していますが、問題なく動作しているように見えますが、データを書き込もうとすると次のエラーが発生します。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 16-17: ordinal not in range(128)

ここでプログラムが ascii の使用を主張する理由がわかりません。新しいワークブック オブジェクトを作成したときは、

wb = xlwt.Workbook(encoding='utf-8')

プログラムファイル自体とそれが読み込むファイルの両方が UTF-8 として保存されます。

誰にもアイデアはありますか?

編集: これは xlwt パッケージへのリンクです。http://pypi.python.org/pypi/xlwt

4

2 に答える 2

16

Excel 97-2003 XLS ファイルでは、テキストの各部分は、latin1可能な場合は でエンコードされUTF-16LEます。そのためには、xlwt にunicodeオブジェクトが必要です。呼び出し元がstrオブジェクトを提供する場合、xlwt は Workbook() 呼び出しで指定されたエンコーディングを使用してデコードを試みます (デフォルトは ですascii)。

これは機能します。次の短いスクリプトを実行して、結果のファイルを Excel で開いてみてください。

import xlwt
wb = xlwt.Workbook(encoding="UTF-8")
uc = u"".join(unichr(0x0410 + i) for i in xrange(32)) # some Cyrillic characters
u8 = uc.encode("UTF-8")
ws = wb.add_sheet("demo")
ws.write(0, 0, uc)
ws.write(1, 0, u8)
ws.write(2, 0, xlwt.Formula("A1=A2"))
ws.write(3, 0, "ASCII is a subset of UTF-8")
wb.save("xlwt_write_utf8.xls")

デコード エラーではなくエンコード エラーが発生しているという事実は、スクリプトのファイル入力部分に問題がある可能性を示しています。発生しているエラーの原因となるスクリプトをできるだけ短くしてください。print repr(your_utf8_text)スクリプトには、失敗したステートメントの直前に何かを含める必要があります。これにより、テキスト データが何であるかを正確に確認できます。完全なエラー メッセージと完全なトレースバック、およびprint repr(contents)非常に短い入力ファイルの内容 ( ) を含めてください。

于 2011-09-01T03:39:14.597 に答える
2

この質問で示唆されているように、ワークブックでエンコーディングを設定します

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

問題も解決するはずです(私にとってはうまくいきました)。

于 2013-08-01T14:47:27.970 に答える