0

Pythonでのエンコーディングに関するもう1つの質問だと思います。私はこのプログラムを持っています:

regex = re.compile(ur'\b[sw]\w+', flags= re.U | re.I)
ergebnisliste = []
for line in fileobject:
  print str(line) 
  erg = regex.findall(line)
  ergebnisliste = ergebnisliste + erg
ergebnislistesortiert = sorted(ergebnisliste, key=lambda x: len(x))
print ergebnislistesortiert
fileobject.close()

s または w で始まる単語をテキストファイルで検索しています。私の「ergebnislistesortiert」は、ソートされた結果リストです。結果リストを出力すると、エンコーディングに問題があることがわかります。

['so', 'Wer', 'sp\xc3']

「sp\xc3」spätとして出力されます。ここで何が問題なのですか?リスト要素が utf-8 なのはなぜですか?

そして、「spät」を印刷するための適切なデコードを取得するにはどうすればよいですか?

どうもありがとう!

4

1 に答える 1

1

\xc3UTF-8 ではありません。これはU+00E4の完全な UTF-8 エンコーディングのフラグメントですが、おそらく Latin-1 デコーダーのようなものでそれを読んでいるでしょう (これは、エンコーディングを指定せずにバイトを読み取る場合に Python 2 が実際に行うことです)。 UTF-8 シーケンスの 2 番目のバイトが と一致しません\w

本当の修正は、最初にデータを Python に読み込むときにデータをデコードすることです。新しいコードを作成している場合は、Python 3 に切り替えることがおそらく最善かつ最も簡単な修正方法です。

Python 2.7 に行き詰まっている場合、Python 3 と互換性のあるアプローチは次のようなものです。

import io
fileobject = io.open(filename, encoding='utf-8')

入力ファイルを制御でき、適切な解決策を大人になるまで延期したい場合は (親に許可を求めてください)、UTF-8 入力ファイルを従来の 8 ビット エンコーディングに変換してください。

于 2017-12-28T13:32:11.467 に答える