decode
ユニコード文字列のメソッドには、実際にはアプリケーションがまったくありません(何らかの理由でユニコード文字列にテキスト以外のデータが含まれている場合を除いて、以下を参照してください)。それは歴史的な理由で主にそこにあると思います。Python 3では完全になくなりました。
unicode().decode()
デフォルト(ASCII)コーデックを使用する暗黙のエンコーディングを実行s
します。これを次のように確認します。
>>> s = u'ö'
>>> s.decode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
>>> s.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
エラーメッセージはまったく同じです。
str().encode()
それが他の方法で回避だ-それは暗黙の試みデコードのs
デフォルトのエンコーディングとの:
>>> s = 'ö'
>>> s.decode('utf-8')
u'\xf6'
>>> s.encode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
このように使用すると、str().encode()
余計にもなります。
しかし、後者の方法にはもう1つの便利なアプリケーションがあります。文字セットとは何の関係もないエンコーディングがあり、意味のある方法で8ビット文字列に適用できます。
>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'
しかし、あなたは正しいです。これらのアプリケーションの両方で「エンコーディング」のあいまいな使用法は...おかしいです。繰り返しにbyte
なりstring
ますが、Python 3では型と型が分離されているため、これは問題ではなくなりました。