-2

Python2.7を使用しています

「iso-8859-1」でコード化された情報を含むファイルを読んでいます。解析後、結果を文字列で取得します。つまり、次のようになりますs1

>>> s1
'D\xf6rfli'
>>> type(s1)
<type 'str'>
>>> s2=s1.decode("iso-8859-1").encode("utf8")
>>> s2
'D\xc3\xb6rfli'
>>> type(s2)
<type 'str'>
>>> print s1, s2
D�rfli Dörfli
>>> 

呼び出し後のタイプがs2まだaであるのはなぜですか?どうすればからに変換できますか?str.encodestrutf-8

4

2 に答える 2

2

strPython 2では、エンコードされた文字列、つまりバイトのシーケンスを意味します。これは文書化された動作です。デコードされstrタイプはunicode

UTF-8エンコーディングであり、ISO-8859-1。したがって、文字列をデコードしてから別のエンコーディングでエンコードし、同じタイプのデータを生成します。

それどころか、Python 3strでは(Unicodeの)テキスト文字列になり、それを呼び出すと。encodeのインスタンスが得られますbytes

したがって、Python 2では、UTF-8文字列strはエンコードされているため、になります。

私はネッドによる2番目の推薦です:彼がリンクしているプレゼンテーションを見てください(ああ、それは彼自身の話ですか?)。私がこれらのことに苦労していたとき、それは私を大いに助けました。

于 2013-01-06T12:51:59.813 に答える
1

これがあなたの質問に答えるかどうかはわかりませんが、これが私が観察したことです。

文字列を印刷可能な形式にしたいだけの場合は、decodeを呼び出した後で停止します。is8859からUnicodeに正常に変換した後、なぜUTF8にエンコードしようとしているのかわかりません。

>>> s1 = 'D\xf6rfli'
>>> s1
'D\xf6rfli'
>>> s2 = s1.decode("iso-8859-1")
>>> s2
u'D\xf6rfli'
>>> print s2
Dörfli
>>> 
于 2013-01-06T12:53:57.500 に答える