2011-12-01 6 views
5

में मल्टीबाइट स्ट्रिंग को कैसे प्रबंधित करें मल्टीबाइट स्ट्रिंग (उदाहरण: सीजेके स्क्रिप्ट) को संभालने के लिए PHP में मल्टीबाइट स्ट्रिंग फ़ंक्शंस हैं। उदाहरण के लिए, मैं अजगर में len फ़ंक्शन का उपयोग करके एक बहु बाइट स्ट्रिंग में कितने पत्र गणना करना चाहते हैं, लेकिन यह एक गलत परिणाम (इस स्ट्रिंग में बाइट्स की यानी नंबर)पाइथन

japanese = "桜の花びらたち" 
print japanese 
print len(japanese)#return 21 instead of 7 

लौट कोई पैकेज या समारोह है PHP में mb_strlen की तरह?

+2

पूर्णता के लिए: यह नहीं रह गया है सभी स्ट्रिंग्स पर देशी यूनिकोड समर्थन के साथ अजगर 3 में एक समस्या है। – poke

उत्तर

9

उपयोग Unicode strings:

# Encoding: UTF-8 

japanese = u"桜の花びらたち" 
print japanese 
print len(japanese) 

नोट स्ट्रिंग के सामने u

यूनिकोड में एक bytestring कनवर्ट करते हैं, decode का उपयोग करें: "桜の花びらたち".decode('utf-8')

2

यह unicode पहले परिवर्तित करने का प्रयास करें:

print len(japanese.decode("utf-8")) 

7. देता है आप utf-8 इनकोडिंग स्ट्रिंग, जो वास्तव में 21 बाइट्स है पर काम कर रहे हैं।

+0

UnicodeEncodeError: 'ascii' कोडेक स्थिति 0-6 में पात्रों को एन्कोड नहीं कर सकते हैं: सीमा में नहीं क्रमसूचक (128) :( – hungneox

+1

माफ करना, अपने समाधान काम भी है> _ <यह मेरी गलती – hungneox

+0

है त्रुटि निकालने के लिए:
UnicodeEncodeError : 'ascii' कोडेक स्थिति 0-6 में पात्रों को एन्कोड नहीं कर सकते हैं: सीमा में नहीं क्रमसूचक (128) :(
निम्नलिखित टुकड़ों में बंटी पंक्ति जोड़ दें:
# एन्कोडिंग: UTF-8
agathodaimon