2017-12-28 47 views
0

Pythonでのエンコーディングに関するもう1つの質問だと思います。私はこのプログラムを持っています:Pythonのデコードとエンコーディング、リスト要素utf-8

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"は並べ替えられた結果リストです。 私は結果リストを印刷し、エンコーディングに問題があるようにappersます

[ 'そう'、 'WER'、 'のsp \のXC3']

「のsp \ xc3 'spätと表示されます。ここで何が間違っていますか?なぜリスト要素はutf-8ですか?

「spät」を印刷するには、どうすれば正しいデコードができますか?

ありがとうございます!

答えて

1

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

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

あなたはPython 2.7で立ち往生している場合は、入力ファイルを管理している、あなたは古いまで、適切な解決策を延期したい場合は、多少のPython 3互換のアプローチは、

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

のようなものです(あなたの両親に許可を求めてください)UTF-8入力ファイルをいくつかのレガシー8ビットエンコーディングに変換してください。

関連する問題