8

タイトルのとおり、str() を使用して Unicode 文字列を str にキャストしない理由はありますか??

>>> 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'>

更新:答えてくれてありがとう、また、特殊文字を使用して文字列を作成すると、自動的にutf-8に変換されるかどうかもわかりませんでした

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

Python 3 の Unicode オブジェクトでもあります

4

1 に答える 1

19

書き込むと、デフォルトのエンコーディングstr(u'a')を使用してUnicode文字列をバイト文字列に変換します(変更する手間をかけない限り)ASCIIになります。

2 番目のバージョンは、文字列を UTF-8 として明示的にエンコードします。

ASCII 以外の文字を含む文字列を試してみると、違いがより明確になります。2 番目のバージョンは引き続き機能します。

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

最初のバージョンでは例外が発生します:

>>> str(u'€')

トレースバック (最新の呼び出しが最後):
  ファイル ""、1 行目、
    str(u'€')
UnicodeEncodeError: 'ascii' コーデックは位置 0 の文字 u'\x80' をエンコードできません: 序数が範囲内にありません(128)
于 2012-08-27T21:04:50.893 に答える