2011-11-21 35 views
14

Estoy un poco confundido. En Python, ¿cuál es la diferencia entre una cadena binaria, una cadena de bytes, una cadena Unicode y una cadena simple antigua (str)? Estoy usando Python 2.6.Diferencia entre cadena binaria, cadena de bytes, cadena Unicode y una cadena ordinaria (str)

+1

Debe especificar si está utilizando Python 2 o Python 3 porque hace una gran diferencia. –

+1

¿Qué versión de Python estás usando? ¿Y dónde encontraste el término "cadena binaria" en el contexto de Python? –

+0

@JohnY He actualizado la pregunta. –

Respuesta

18

Depende de la versión de Python que esté utilizando.

En Python 2.x si escribe 'abc' tiene el tipo str pero esto significa una cadena de bytes. Si desea una cadena Unicode, debe escribir u'abc'.

En Python 3.x si escribe 'abc', todavía tiene el tipo str pero ahora esto significa que es una cadena de caracteres Unicode. Si desea una cadena de bytes, debe escribir b'abc'. No está permitido escribir u'abc'.

 | 2.x      | 3.x 
--------+--------------------------+----------------------- 
Bytes | 'abc' <type 'str'>  | b'abc' <type 'bytes'> 
Unicode | u'abc' <type 'unicode'> | 'abc' <type 'str'> 
+0

Gracias por eso. Para que lo entienda correctamente, básicamente la diferencia entre una cadena de bytes y una cadena común es que una cadena de bytes no puede contener caracteres Unicode. –

+2

@Imran Azad: puede pensar en una cadena de bytes como una lista ordenada de bytes, es decir, enteros comprendidos entre 0 y 255 inclusive. Una cadena Unicode es una lista ordenada de caracteres Unicode (letras, números, signos de puntuación, minúsculos muñecos de nieve (☃), etc.). La confusión que creo proviene de Python 2.x tratando las cadenas de bytes como si fueran cadenas de caracteres. Eso casi funciona, excepto cuando empiezas a usar caracteres fuera del rango ASCII, te encuentras con problemas. –

+0

Ah, ya veo, gracias. –

Cuestiones relacionadas