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)?
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)?
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.
Cóż, otrzymuję 9, gdy wykonuję 'len (mystring)' – NullUserException
Spodziewałem się uzyskać 5 – NullUserException
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