ユーザー指定の文字列をUTF-8に変換する簡単な方法を探しています。非常にスマートである必要はありません。すべてのASCIIバイト文字列とすべてのUnicode文字列(2.x unicode
、3.x str
)を処理する必要があります。
unicode
3.xで廃止されて意味が変わったので、メソッドの存在をチェックし、引数なしでそれを呼び出して、チェックを行う代わりに、ロケールに基づいてPythonに何をすべきかを理解させるstr
のが良い考えだと思いました。それはまったく良い考えではないことがわかりました:decode
isinstance
>>> u"één"
u'\xe9\xe9n'
>>> u"één".decode()
Traceback (most recent call last):
File "<ipython-input-36-85c1b388bd1b>", line 1, in <module>
u"één".decode()
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
私の質問は2つあります。
- なぜ
unicode.decode
方法があるのですか?Unicode文字列は「エンコードされていない」と見なされていると思いました。これは、二重にエンコードされた文字列を取得する確実な方法のように見えます。 - Python 3と上位互換性のある方法でこの問題に取り組むにはどうすればよいですか?