2010-10-01 5 views
8

साथ बाइट्स में एक UTF-8 तार का एक आकार मिलता है के बाद एक UTF-8 स्ट्रिंग इस तरह:मैं कैसे पायथन

mystring = "işğüı" 

यह संभव अजगर के साथ बाइट्स में अपनी (स्मृति में) आकार पाने के लिए है (2.5)?

+0

ठीक है, मुझे 9 मिलते हैं जब मैं 'लेन (mystring) ' – NullUserException

+1

करता हूं तो मुझे 5 – NullUserException

+0

प्राप्त करने की उम्मीद है यदि आप इसे यूनिकोड शाब्दिक में परिवर्तित करते हैं तो आपको 5' 'mystring = u" işğüı "' मिलता है। अन्यथा, यह 'i \ xc5 \ x9f \ xc4 \ x9f \ xc3 \ xbc \ xc4 \ xb1'' – aaronasterling

उत्तर

7

मान लीजिए कि आप यूटीएफ -8 बाइट्स की संख्या (और अतिरिक्त बाइट्स जो पायथन को ऑब्जेक्ट को स्टोर करने की आवश्यकता नहीं है), यह किसी भी अन्य स्ट्रिंग की लंबाई के समान है। पायथन 2.x में एक स्ट्रिंग अक्षरक एन्कोडेड बाइट्स की एक स्ट्रिंग है, यूनिकोड वर्ण नहीं।

बाइट तार:

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

यूनिकोड तार:

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

यह यूनिकोड में अपने तार के सभी बनाए रखने के लिए अच्छा अभ्यास है, और केवल एनकोड जब बाहरी दुनिया से संपर्क है। इस मामले में, आप एन्कोडिंग के बाद आकार का पता लगाने के लिए len(myunicode.encode('utf-8')) का उपयोग कर सकते हैं।

संबंधित मुद्दे