2012-08-27 18 views
8

Como título, ¿hay alguna razón para no usar str() para convertir cadena unicode en str?Python ¿cuál es la diferencia entre str (u'a ') y 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'> 

ACTUALIZACIÓN: gracias por la respuesta, tampoco sabía si creo una cadena utilizando un carácter especial que se convertirá automáticamente en UTF-8

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

También es un objeto Unicode en Python 3

Respuesta

19

Cuando se escribe str(u'a') que convierte la cadena Unicode a una cadena de bytes utilizando la codificación por defecto la que (a menos que haya tomado la molestia de changing it) será ASCII.

La segunda versión codifica explícitamente la cadena como UTF-8.

La diferencia es más evidente si lo intenta con una cadena que contiene caracteres que no son ASCII. La segunda versión seguirá funcionando:

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

La primera versión dará una excepción:

>>> 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) 
Cuestiones relacionadas