2010-10-01 7 views
8

Posiadanie UTF-8 ciąg tak:Jak mogę uzyskać rozmiaru UTF-8 ciąg w bajtach z Pythonem

mystring = "işğüı" 

jest to możliwe, aby uzyskać jego (w pamięci) rozmiar w bajtach z Python (2.5)?

+0

Cóż, otrzymuję 9, gdy wykonuję 'len (mystring)' – NullUserException

+1

Spodziewałem się uzyskać 5 – NullUserException

+0

Jeśli skonwertujesz to na literał unikodowy, otrzymasz 5 '' mystring = u "işğüı" '. poza tym zamienia się w '' i \ xc5 \ xcf \ xc4 \ x9f \ xc3 \ xbc \ xc4 \ xb1'' – aaronasterling

Odpowiedz

7

Zakładając, że masz na myśli liczbę bajtów UTF-8 (a nie dodatkowe bajty, które Python wymaga do przechowywania obiektu), jest taka sama jak dla długości dowolnego innego ciągu. Literał łańcuchowy w Pythonie 2.x to ciąg kodowanych bajtów, a nie znaków Unicode.

Byte ciągi:

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

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

Jest to dobra praktyka, aby utrzymać wszystkich ciągów znaków w Unicode, a tylko kodują podczas komunikowania się ze światem zewnętrznym. W takim przypadku możesz użyć numeru len(myunicode.encode('utf-8')), aby znaleźć rozmiar po kodowaniu.

Powiązane problemy