2010-10-01 8 views
8

Tener una cadena UTF-8 como esto:¿Cómo consigo un tamaño de una cadena UTF-8 en Bytes con Python

mystring = "işğüı" 

es posible conseguir su tamaño (en la memoria) en bytes con Python (2.5)?

+0

Bueno, obtengo 9 cuando '' len (mystring) ' – NullUserException

+1

esperaba obtener 5 – NullUserException

+0

Si lo convierte a unicode literal, obtiene 5' 'mystring = u" işğüı "'. de otro modo, se convierte en ''i \ xc5 \ x9f \ xc4 \ x9f \ xc3 \ xbc \ xc4 \ xb1'' – aaronasterling

Respuesta

7

Suponiendo que se refiere al número de bytes UTF-8 (y no a los bytes adicionales que Python requiere para almacenar el objeto), es el mismo que para la longitud de cualquier otra cadena. Un literal de cadena en Python 2.x es una cadena de bytes codificados, no caracteres Unicode.

cadenas de bytes:

>>> mystring = "işğüı" 
>>> print "length of {0} is {1}".format(repr(mystring), len(mystring)) 
length of 'i\xc5\x9f\xc4\x9f\xc3\xbc\xc4\xb1' is 9 

cadenas Unicode:

>>> myunicode = u"işğüı" 
>>> print "length of {0} is {1}".format(repr(myunicode), len(myunicode)) 
length of u'i\u015f\u011f\xfc\u0131' is 5 

Es una buena práctica para mantener todas sus cadenas en Unicode, y sólo codifican la hora de comunicarse con el mundo exterior. En este caso, puede usar len(myunicode.encode('utf-8')) para encontrar el tamaño que sería después de la codificación.

Cuestiones relacionadas