2010-10-01 1 views
8

eine UTF-8-Zeichenfolge wie folgt zu haben:Wie erhalte ich eine Größe eines UTF-8-String in Bytes mit Python

mystring = "işğüı" 

ist es möglich, seine (im Speicher) Größe in Bytes mit Python zu erhalten (2.5)?

+0

Nun, ich bekomme 9, wenn ich 'len (mystring)' – NullUserException

+1

Ich erwarte zu 5 – NullUserException

+0

Wenn Sie es in ein Unicode-Literal konvertieren, erhalten Sie 5 '' mystring = u "işğüı" '. Andernfalls wird es zu "i \ xc5 \ x9f \ xc4 \ x9f \ xc3 \ xbc \ xc4 \ xb1". – aaronasterling

Antwort

7

Angenommen, Sie meinen die Anzahl der UTF-8-Bytes (und nicht die zusätzlichen Bytes, die Python benötigt, um das Objekt zu speichern), so wie für jede andere Zeichenfolge. Ein String-Literal in Python 2.x ist eine Zeichenfolge codierter Bytes, keine Unicode-Zeichen.

Byte Strings:

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

Unicode-Strings:

>>> 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 ist gute Praxis, alle Ihre Strings in Unicode zu halten und nur kodieren, wenn sie mit der Außenwelt zu kommunizieren. In diesem Fall könnten Sie len(myunicode.encode('utf-8')) verwenden, um die Größe nach dem Codieren zu finden.

Verwandte Themen