2010-10-01 9 views
8

Avere una stringa UTF-8 in questo modo:Come faccio ad avere una dimensione di una stringa UTF-8 in byte con Python

mystring = "işğüı" 

è possibile ottenere la sua dimensione (in memoria) in byte con Python (2,5)?

+0

Bene, ottengo 9 quando faccio 'len (mystring)' – NullUserException

+1

Mi aspettavo di ottenere 5 – NullUserException

+0

Se lo converti in un letterale unicode ottieni 5 '' mystring = u "işğüı" '. in altre parole, diventa "i \ xc5 \ x9f \ xc4 \ x9f \ xc3 \ xbc \ xc4 \ xb1'' – aaronasterling

risposta

7

Assumendo si intende il numero di byte UTF-8 (e non i byte extra richiesti da Python per memorizzare l'oggetto), è lo stesso della lunghezza di qualsiasi altra stringa. Una stringa letterale in Python 2.x è una stringa di byte codificati, non caratteri Unicode.

stringhe di byte:

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

stringhe 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 

E 'buona pratica per mantenere tutti i tuoi stringhe in Unicode, e solo la codifica durante la comunicazione con il mondo esterno. In questo caso, è possibile utilizzare len(myunicode.encode('utf-8')) per trovare la dimensione che sarebbe dopo la codifica.

Problemi correlati