मैं XML फ़ाइलों को पार्स/बनाने के लिए TinyXML का उपयोग कर रहा हूं। अब, the documentation के अनुसार यह लाइब्रेरी यूटीएफ -8 के माध्यम से मल्टीबाइट चरित्र सेट का समर्थन करती है। अब तक मुझे लगता है कि बहुत अच्छा है। लेकिन, पुस्तकालय प्रदान करने वाला एकमात्र एपीआई (तत्व नाम प्राप्त करने/सेट करने, विशेषता नाम और मानों के लिए ... ... जहां भी एक स्ट्रिंग का उपयोग किया जाता है) std::string
या const char*
के माध्यम से होता है। इसने मुझे मल्टीबाइट चरित्र सेट समर्थन की अपनी समझ पर संदेह किया है। एक स्ट्रिंग जो केवल 8-बिट वर्णों का समर्थन करती है, में 16 बिट वर्ण होता है (जब तक कि यह कोड पृष्ठ का उपयोग नहीं करता है, जो 'यूनिकोड' दावे का समर्थन करता है)? मैं समझता हूं कि आप सैद्धांतिक रूप से 16-बिट कोड पॉइंट ले सकते हैं और इसे std::string
में 2 वर्णों में विभाजित कर सकते हैं, लेकिन यह std::string
को 'यूनिकोड' स्ट्रिंग में परिवर्तित नहीं करेगा, इससे अधिकांश उद्देश्यों के लिए यह अमान्य हो जाएगा और शायद गलती से फ़ाइल में लिखे जाने पर और किसी अन्य प्रोग्राम द्वारा पढ़े जाने पर काम करें।TinyXML का यूटीएफ -8 समर्थन कैसे काम करता है?
तो, क्या कोई मुझे बता सकता है कि लाइब्रेरी कैसे '8-बिट इंटरफ़ेस' (std::string
या const char*
) प्रदान कर सकती है और अभी भी 'यूनिकोड' स्ट्रिंग का समर्थन करती है?
(शायद मैंने यहां कुछ यूनिकोड शब्दावली को मिश्रित किया है; उस से आने वाले किसी भी भ्रम के बारे में खेद है)।
ठीक है धन्यवाद, यह स्पष्ट हो रहा है, लेकिन फिर भी - यूटीएफ -8 डेटा का प्रतिनिधित्व करने के लिए std :: स्ट्रिंग का उपयोग करके, यह अर्थात् गलत नहीं है? आप उस स्ट्रिंग की सामग्री पर भरोसा नहीं कर पाएंगे - यह जानने का एक तरीका भी नहीं होगा कि यह कितना समय है! (चरित्र की लंबाई में)। – Roel
और यहां तक कि कॉन्स्ट char * संस्करण के लिए, आपको अभी भी स्ट्रिंग के साथ काम करने के लिए एक और लाइब्रेरी का उपयोग करना होगा। – Roel
गलत से अधिक अपरिभाषित। std :: स्ट्रिंग के तरीकों (concatenation, iterator slicing, find_ *, आदि) अभी भी काम करते हैं। लंबाई() को वैसे भी == आकार() के रूप में परिभाषित किया जाता है। एक नई पूर्व शर्त है कि ऑफ़सेट एक चार सीमा पर हो। अगर std :: स्ट्रिंग ने एन्कोडिंग के बारे में कोई वादा किया है तो यह गलत होगा, लेकिन ऐसा नहीं है। – puetzk