0

Excel2007スプレッドシート(​​私はxlrd xlwtとopenpyxlを使用)でドイツ語の単語(ウムラウト文字を含む場合もあります)を処理すると、次の値が得られます。

var = str(ws.cell(row=i+k,column=0).value).encode('latin-1')

私はprint(var)で得ます:

'[a word')

ウムラウト文字を含む単語に出くわすまで、次のようになります。

Traceback (most recent call last):
  File "C:\Users\cristina\Documents\horia\Linguistics3\px t3.py", line 68, in <module>
    var = str(ws4.cell(row=i+k,column=0).value).encode('latin-1')
UnicodeEncodeError: 'ascii' codec can't encode character u'\xdf' in position 3:ordinal not in range(128)

そして、プログラムは停止します。

varを次のように定義すると:

var = u'str(ws4.cell(row=i+k,column=0).value)'.encode('latin-1')

鶏がprint(var)をしようとすると、次のようになります。

var=str(ws.cell(row=i+k,column=0).value)

プログラムは最後まで正常に実行されます

Python Shellでvarの値を取得できますが、プログラムの「print(var)」では取得できません。

誰かが私に解決策を与えることができますか?

4

1 に答える 1

2

まず、これを読んでください:http: //www.joelonsoftware.com/articles/Unicode.html(真剣に)

次に、Python2には2つの異なるデータ型があることを理解してください。ユニコードは、可能なすべての文字を「アグノスティック」に処理しますが、「印刷」やファイルへの書き込みなどの入出力では 、他の文字にエンコードせずに使用することはできません。データ型:文字列。

文字列はエンコーディングに依存します。

あなたのエラーメッセージを考えると、私がほぼ確信していることは、ws4.cell(row=i+k,column=0).value呼び出しがあなたにユニコード値を返しているということです。print (type(ws4.cell(row=i+k,column=0).value)(ここでは、Windows以外の環境でテストすることはできません)-確かに、推測作業の代わりに、 Unicode値を取得していることを表明するためだけに一度実行することをお勧めし ます。

したがって、str(ws4.(...).value)Pythonに、エンコーディングなしでユニコードをstrに変換するように指示します。これは、後続の「デコード」呼び出しではなく、エラーを発生させる呼び出しです。

それが起こっているのであれば、単にそのstr呼び出しを置き換えてunicodeください:

var = u'str(ws4.cell(row=i+k,column=0).value)'.encode('latin-1') 

それはあなたの問題を解決するはずです。上でリンクした記事を読んでいただければ幸いです参考になります。

また、使用している対応するエンコーディングでPythonソースコードをマークします。そうしないと、ソースコード内の非ASCII文字でエラーが発生します。

たとえば、コードの最初の行に次のように記述します。

# coding: latin1

(ただし、深刻なプロジェクトでは、代わりにutf-8を使用する必要があります。)

于 2013-01-06T11:39:16.077 に答える