2016-03-26 23 views
1

多くの類似の質問と記事を検索して見つけましたが、問題を解決できないものはありません。Python 3:ドイツのウムラウトを含むUTF-8ファイルを読む

私は、Python 3.5.0(v3.5.0:374f501f4567、2015年9月13日、2時27分37秒)を使用

私はシンプルを持って

のWindows 10上で[MSC v.1900 64ビット(AMD64)]をそのようにUTF-8でのWindows用にエンコードされたテキストファイルは:

Notepadd++ Screenshot http://i67.tinypic.com/29ym79l.jpg

私がやりたいすべてはPythonの文字列にこのファイルの内容を読んで、たとえば、標準で正しく表示することですコンソール。

file_name=r'c:\temp\encoding_test.txt' 
    fh=open(file_name,'r') 
    f_str=fh.read() 
    fh.close() 
    print(f_str) 

印刷文は例外が発生します:ここで

は無残に失敗した最初の試みである

位置100に '\ u201e' の文字をエンコードすることはできません

'のcharmap' コーデック:文字が未定義

デバッガを使用して

にマップ、f_strには、次のものが含まれています

「私は、Pythonにこのファイルを読んだ後、正しく表示するには、次の文字をしたいと思います:\ n \ NA「A-Üäöüß\ n」を

これは、すでに私にとって非常に不可解です。 Python 3はどこでもデフォルトとしてUTF-8を使用していませんか?その他のエンコーディングはどのように機能するのですか私はメモ帳のすべてを試してみました+ +、何も動作します。

OK、もう少し洗練された、私が試した:

import codecs 
    file_name=r'c:\temp\encoding_test.txt' 
    my_encoding='utf-8' 
    fh=codecs.open(file_name,'r',encoding=my_encoding) 
    f_str=fh.read().encode(my_encoding) 
    fh.close() 
    print(f_str) 

これは、少なくとも、例外は発生しませんが、利回り

b'Iを正しく表示するには、次の文字を希望このファイルをPythonに読み込んだ後、\ r \ n \ r \ n \ xc3 \ x84 \ xc3 \ x96 \ xc3 \ x9c \ xc3 \ xa4 \ xc3 \ xb6 \ xc3 \ xbc \ xc3 \ x9f \ r \ n '

私に完全な混乱。誰でもここで私はこれを整理するのを助けてくださいできますか?

答えて

1

あなただけの私たちが戻ってデコードしたときにあなたが見ることができるようにしたい与えるべきデータを印刷し、codecs.openを使用した後にバイトにエンコードされている:あなたは正しい出力が表示されない場合、それはあなたのシェルが

In [31]: s = b'I would like the following characters to display correctly after reading this file into Python:\r\n\r\n\xc3\x84\xc3\x96\xc3\x9c\xc3\xa4\xc3\xb6\xc3\xbc\xc3\x9f\r\n' 

In [32]: print(s) 
b'I would like the following characters to display correctly after reading this file into Python:\r\n\r\n\xc3\x84\xc3\x96\xc3\x9c\xc3\xa4\xc3\xb6\xc3\xbc\xc3\x9f\r\n' 

In [33]: print(s.decode("utf-8")) 
I would like the following characters to display correctly after reading this file into Python: 

ÄÖÜäöüß 

ですエンコードが問題です。 Windowsコンソールのエンコーディングはutf-8ではないので、どこからコードを実行しているのか、シェルのエンコーディングは重要です。

4

回答が複雑すぎます。

fh = open(file_name, encoding='utf8') 

すべてが問題なく動作します。

あなたの他の質問への答え:

いないどこでもデフォルトとしてUTF-8のPython 3を使用?

「あなたのOSと矛盾するので、外部の世界と通信するときは(この場合はファイルシステム)」ではありません。仕様では、ユーザーの推奨エンコーディングはロケールに依存しています。正確なデフォルトのコードページのセットに応じて、最も可能性の高いWindows上の「CP 何かを」 -

>>> import locale 
>>> locale.getpreferredencoding() 

は、それはあなたのシステム上にあるかを確認するようにしてください。しかし、あなたはいつも明示的なencodingの引数をopenに上書きすることができます。

ここで、新しいことを学んでください。 :-)

関連する問題