2012-08-27 3 views
8

Jako tytuł, czy istnieje powód, aby nie używać str() do przesyłania ciągów Unicode do str ??Python Jaka jest różnica między str (u'a ') 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: dzięki za odpowiedź, także nie wiem, czy utworzyć ciąg za pomocą specjalnego znaku zostanie ona automatycznie konwertować na UTF-8

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

jest również obiektem Unicode w Pythonie 3

Odpowiedz

19

Kiedy piszesz str(u'a') konwertuje ciąg Unicode do bytestring używając domyślne kodowanie który (chyba, że ​​już sobie trud changing it) będzie ASCII.

Druga wersja jawnie koduje ciąg jako UTF-8.

Różnica jest bardziej widoczna, jeśli spróbujesz z ciągiem zawierającym znaki spoza ASCII. Druga wersja będzie nadal działać:

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

Pierwsza wersja da wyjątek:

>>> 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) 
Powiązane problemy