2012-08-06 14 views
6

के लिए आवश्यक बाइट्स की संख्या प्राप्त करें मेरे पास यूनिकोड के रूप में एन्कोडेड कोरियाई स्ट्रिंग है जैसे u'정정'। मुझे कैसे पता चलेगा कि इस स्ट्रिंग का प्रतिनिधित्व करने के लिए कितने बाइट्स की आवश्यकता है?यूनिकोड स्ट्रिंग

मुझे सटीक बाइट गिनती जानने की आवश्यकता है क्योंकि मैं आईओएस पुश अधिसूचना के लिए स्ट्रिंग का उपयोग कर रहा हूं और इसकी पेलोड के आकार पर एक सीमा है।

len('정정') काम नहीं करता है क्योंकि यह बाइट्स की संख्या नहीं, वर्णों की संख्या देता है।

उत्तर

14

आप को पता है कि एन्कोडिंग आप अपनी बाइट आकार का आकलन करना चाहते की जरूरत है:

>>> print u'\uC815\uC815' 
정정 
>>> print len(u'\uC815\uC815') 
2 
>>> print len(u'\uC815\uC815'.encode('UTF-8')) 
6 
>>> print len(u'\uC815\uC815'.encode('UTF-16-LE')) 
4 
>>> print len(u'\uC815\uC815'.encode('UTF-16')) 
6 
>>> print len(u'\uC815\uC815'.encode('UTF-32-LE')) 
8 
>>> print len(u'\uC815\uC815'.encode('UTF-32')) 
12 

आप वास्तव में समीक्षा करने के लिए पूरी तरह से Python Unicode HOWTO एक यूनिकोड वस्तु और यह बाइट के बीच अंतर की सराहना करना चाहते हैं एन्कोडिंग।

एक और उत्कृष्ट लेख The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) है, जोएल स्पॉल्स्की (स्टैक ओवरफ़्लो के पीछे के लोगों में से एक) द्वारा।

+0

आप कैसे जानते थे कि यह char '\ uC815' है? यह क्या एन्कोडिंग है? मैंने utf-8/16/32 का प्रयास किया और उनमें से कोई भी सही नहीं है, लेकिन '\ uC815' काम कर रहा है। – jasondinh

+0

मेरे पास यूनिकोड चेकर नामक एक एप्लिकेशन है जिसे मैं संदर्भ के लिए उपयोग करता हूं, लेकिन 'C815' यूनिकोड कोड बिंदु है। यदि आप यूटीएफ -8 या यूटीएफ -16 बाइट अनुक्रम जानते हैं, तो आप यूनिकोड वर्ण (''xx \ xA0 \ x95'.decode (' UTF-8 ')') प्राप्त करने के लिए * से * डीकोड कर सकते हैं। पाइथन प्रॉम्प्ट यहां सहायक है; उदाहरण के लिए, पाइथन टर्मिनल पर यूनिकोड मानों को प्रतिबिंबित (प्रिंट नहीं) करते समय इसके 'यूनिकोड_स्केप' एन्कोडिंग का उपयोग करेगा। –

+2

यूटीएफ -16 एन्कोडिंग की लंबाई का तात्पर्य है कि यूटीएफ -16 बीओएम शामिल किया जा रहा है। मुझे नहीं पता कि पाइथन इससे बचने के लिए 'एन्कोड ('यूटीएफ -16 बीई') जैसे कुछ का समर्थन करता है या नहीं। – bames53

4

unicode का प्रतिनिधित्व करने के लिए आवश्यक बाइट्स की संख्या आपके द्वारा उपयोग किए जाने वाले एन्कोडिंग के आधार पर भिन्न होती है।

>>> s = u'정정' 
>>> len(s) 
2 
>>> len(s.encode('UTF-8')) 
6 
>>> len(s.encode('UTF-16')) 
6 
>>> len(s.encode('UTF-32')) 
12 

आप एन्कोडिंग परिणाम पुन: उपयोग करने जा रहे हैं, मैं इसे एक बार एन्कोडिंग, तो इसकी len खींच रहा है और बाद में पहले से ही एन्कोड परिणाम पुन: उपयोग की सलाह देते हैं।

0

सुनिश्चित करें कि आप सही standard encoding का उपयोग कर रहे हैं।

आप नहीं हैं, तो आप कर सकते हैं हमेशा decodedString = myString.decode('UTF-8') (स्थानापन्न UTF-8 सही एन्कोडिंग तार के साथ कि आप पिछले लिंक से प्राप्त कर सकते हैं, अगर नहीं UTF-8) एक प्रारूप में स्ट्रिंग पाने के लिए जहां len(decodedString) लौटना चाहिए उचित संख्या

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