3

Python のマニュアル.encode()で、.decode()文字列メソッドについて言及されていることがわかります。Python CLI で遊んでみるu'hello'と、「通常の」文字列とは異なるデータ型のUnicode 文字列を作成'hello'でき、 で変換/キャストできることがわかりましたstr()。しかし、実際の問題は ASCII 127u'שלום'を超える文字を使用するときに始まり、経験的に何が起こっているのかを正確に判断するのに苦労しています。

スタック オーバーフロー には Python のUnicode文字列のエンコード/デコード処理に関する混乱の例があふれ てい ます。

str()メソッドを使用して文字列をエンコードおよびデコードするとき、特に 7 バイトで表現できない文字が文字列に含まれている場合、正確には何が起こりますか (バイトはどのように変更され、データ型はどのように変更されますか) ? どうやら、データ型を持つ Python 変数は<type 'str'>エンコードとデコードの両方ができるというのは本当ですか? エンコードされている場合、文字列が UTF-8、ISO-8859-1、またはその他のエンコードで表されていることを意味すると理解していますが、これは正しいですか? デコードされている場合、これはどういう意味ですか? デコードされた文字列はユニコードですか? もしそうなら、なぜ彼らはデータ型を持っていないの<type 'unicode'>ですか?

後でこれを読む人のために、Python 2 と Python 3 の両方に対処する必要があると思います。ありがとうございました!

4

1 に答える 1

3

これは Python 2 の場合のみdecodeです。Python 2 の文字列に対するメソッドの存在は疣贅であり、Python 3 で変更されました (同等のbytesは のみですdecode)。

既にエンコードされた文字列を「エンコード」することはできません。encodeaを呼び出すと何が起こるかというと、Pythonはデフォルトの encoding を使用してそれをstr暗黙的に呼び出します。これは通常 ASCII です。これはほとんどの場合、あなたが望むものではありません。str を別のエンコーディングに変換する前に、常に呼び出して str を unicode に変換する必要があります。decodedecode

(そして、デコードされた文字列Unicode であり、type を持っているので<unicode>、その質問の意味がわかりません。)

もちろん、Python 3 では文字列はデフォルトで Unicode です。それらをエンコードすることしかできませんbytes-上で述べたように、デコードすることしかできません。

于 2013-06-12T10:50:52.027 に答える