c++ - charset-aware tests like isalpha() etc. and iterators - is there such thing? -
मुझे एक अक्षर स्ट्रिंग और एन्कोडिंग वर्णसेट मिलता है, जैसे iso_8859-1
, utf -8
आदि। मुझे स्ट्रिंग स्कैन करने की आवश्यकता है जिसे मैं शब्दों में भेजूंगा, क्योंकि मैं जारी करना ()
और ispunc ()
।
क्या वर्ण परीक्षण कार्य हैं जो वर्णक को खाते में लेते हैं? इसके अलावा, क्या वहां बीते बाइट्स की सही संख्या अग्रिम है?
नोट:
मुझे पता है कि मैं स्ट्रिंग को यूटीएफ 8 में कनवर्ट कर सकता हूं और फिर Glib :: thirst
का उपयोग कर सकते हैं और इसके सुविधाएं। मुझे आश्चर्य है कि अगर मैं इसे से बच सकता हूं।
यदि आप किसी भी कीमत पर रूपांतरण से बचना चाहते हैं, तो आप को अलग-अलग दिनचर्या का एक गुच्छा लिखना पड़ता है:
<पूर्व> स्थिर शून्य हेंडल_आसो_885 9_1 (कॉन्स्ट चार *); स्थिर शून्य हेंडेलआईएसओ_885 9_15 (कॉन्स्ट चार *); स्थैतिक शून्य हेंड_टाफ_8 (कॉन्स्ट चार *); स्थैतिक शून्य संभाल_स्ट्रिंग (कॉन्स्ट char * s, const char * एन्कोडिंग) {यदि (एसआरसीएमपी (एन्कोडिंग, "आईएसओ -885 9 -1") == 0) {handle_iso_8859_1 (एस); } और अगर (strcmp (एन्कोडिंग, "आईएसओ -8859-15") == 0) {handle_iso_8859_15 (एस); } और अगर (strcmp (एन्कोडिंग, "यूटीएफ -8") == 0) {handle_utf_8 (एस); } और {त्रुटि ("अज्ञात एन्कोडिंग:% s", एन्कोडिंग); }}
आप पहली जगह में रूपांतरण से बचने के लिए क्यों चाहते हैं? क्या यह बहुत महंगा है? क्या यह वास्तव में बहुत महंगा है? आईएसओ -8859-1 से यूटीएफ -8 में परिवर्तित करना काफी सस्ता और आसान है। ठीक है, हो सकता है आपको एक अतिरिक्त स्मृति आवंटन और कुछ बाइट्स की प्रतिलिपि की आवश्यकता हो। लेकिन क्या यह वास्तव में एक ही कोड तीन या उससे अधिक बार लिखने के लिए वास्तव में लायक है?
Comments
Post a Comment