मुझे std::u16string
और std::u32string
सी ++ 11 में देखने में खुशी है, लेकिन मैं सोच रहा हूं यूटीएफ -8 मामले को संभालने के लिए std::u8string
क्यों नहीं है। मैं इस धारणा के तहत हूं कि std::string
यूटीएफ -8 के लिए है, लेकिन ऐसा लगता है कि यह बहुत अच्छा नहीं है। मेरा मतलब क्या है, std::string.length()
स्ट्रिंग में वर्णों की संख्या के बजाय स्ट्रिंग के बफर का आकार वापस नहीं करता है?std :: u16string, std :: u32string, std :: string, length(), आकार(), कोडपॉइंट्स और वर्ण
तो, length()
नई सी ++ 11 कक्षाओं के लिए निर्धारित मानक तारों की विधि कैसी है? क्या वे स्ट्रिंग के बफर का आकार, कोडपॉइंट्स की संख्या, या वर्णों की संख्या (एक सरोगेट जोड़ी 2 कोड अंक मानते हैं, लेकिन एक चरित्र है। अगर मैं गलत हूं तो कृपया मुझे सही करें)?
और size()
के बारे में क्या; क्या यह length()
के बराबर नहीं है? मेरे भ्रम के स्रोत के लिए http://en.cppreference.com/w/cpp/string/basic_string/length देखें।
तो, मुझे लगता है कि, मेरे मौलिक सवाल यह है कि एक का उपयोग std::string
, std::u16string
करता है, और std::u32string
और ठीक से बफर आकार, कोड पॉइंट्स की संख्या, और वर्णों की संख्या के बीच अंतर है? यदि आप मानक इटरेटर्स का उपयोग करते हैं, तो क्या आप बाइट्स, कोडपॉइंट्स या कैरेक्टरों पर फिर से चल रहे हैं?
'std :: string' utf8 के रूप में utf8 के रूप में काम करता है 'u16string' utf16 के लिए करता है: यह संबंधित प्रकार के तत्वों को संभालता है, और एक से अधिक तत्वों के अनुक्रम द्वारा दर्शाए गए वर्णों से निपटता नहीं है। –
यहां जाएं: http://utf8everywhere.org/#myth.strlen –