2012-08-27 5 views
8

タイトルとして、str()をunicode文字列をstrにキャストする理由はありませんか?Python str(u'a ')とu'a'.encode(' utf-8 ')の違いは何ですか?

>>> str(u'a') 
'a' 
>>> str(u'a').__class__ 
<type 'str'> 
>>> u'a'.encode('utf-8') 
'a' 
>>> u'a'.encode('utf-8').__class__ 
<type 'str'> 
>>> u'a'.encode().__class__ 
<type 'str'> 

UPDATE:答えてくれてありがとう、また、私は特殊文字を使用して文字列を作成する場合には、自動的にUTF-8

>>> a = '€' 
>>> a.__class__ 
<type 'str'> 
>>> a 
'\xe2\x82\xac' 

に変換されます知りませんでしたが、またのpython 3でUnicodeオブジェクトであります

答えて

19

あなたがstr(u'a')を書くとき、それはASCIIになります(あなたがchanging itのトラブルに行ってきた場合を除く)デフォルト・エンコーディングを使用してバイト文字列にUnicode文字列に変換します。

第2のバージョンでは、文字列がUTF-8として明示的にエンコードされます。

非ASCII文字を含む文字列を試してみると、その違いが明らかです。第二版はまだ動作します:

>>> str(u'€') 

Traceback (most recent call last): 
    File "", line 1, in 
    str(u'€') 
UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128) 

>>> u'€'.encode('utf-8') 
'\xc2\x80' 

最初のバージョンは、例外を与えます

関連する問題