क्या इन दो स्ट्रिंग स्टोरेज प्रारूपों के बीच कोई अंतर है?"यूटीएफ -16" और "std :: wstring" के बीच क्या अंतर है?
उत्तर
std::wstring
wchar_t
का एक कंटेनर है। wchar_t
का आकार निर्दिष्ट नहीं है- विंडोज कंपाइलर 16-बिट प्रकार का उपयोग करते हैं, यूनिक्स कंपाइलर 32-बिट प्रकार का उपयोग करते हैं।
UTF-16 16-बिट पूर्णांक के अनुक्रमों में यूनिकोड कोड बिंदुओं के एन्कोडिंग अनुक्रमों का एक तरीका है।
दृश्य स्टूडियो का उपयोग करना, यदि आप विस्तृत चरित्र शाब्दिक (जैसे L"Hello World"
) कि BMP के बाहर कोई वर्ण हो उपयोग करते हैं, आप UTF-16 के साथ खत्म हो जाएगा, लेकिन ज्यादातर दो अवधारणाओं से संबंधित नहीं हैं। यदि आप बीएमपी के बाहर के पात्रों का उपयोग करते हैं, तो std::wstring
आपके लिए यूनिकोड कोड बिंदुओं में surrogate pairs का अनुवाद नहीं करेगा, भले ही wchar_t
16 बिट्स हो।
क्या आपका मतलब है कि विंडोज ऑपरेटिंग सिस्टम में इस्तेमाल होने पर केवल गैर-बीएमपी यूनिकोड चरित्र के लिए stt :: wstring यूटीएफ -16 के समान है? – hkBattousai
सं। Std :: wstring केवल पूर्णांक का एक कंटेनर है। कंटेनर का एन्कोडिंग पूरी तरह से आपके द्वारा कंटेनर में डाले गए डेटा पर निर्भर करता है। –
+1: यूटीएफ से अपरिचित लोगों के लिए बीएमपी को परिभाषित करना बुद्धिमान हो सकता है। –
UTF-16 के 16-बाइट तत्वों में प्रतिनिधित्व पाठ की एक अवधारणा है, लेकिन एक वास्तविक शाब्दिक चरित्र तत्व एक से शामिल हो सकते हैं
std :: wstring सिर्फ इन तत्वों का एक संग्रह है, और एक वर्ग मुख्य रूप से है उनके भंडारण से संबंधित है।
wstring में तत्व, wchar_t कम से कम 16-बिट्स है लेकिन 32 बिट्स हो सकता है।
क्या आप उदाहरण देकर अधिक विस्तार से समझा सकते हैं। उदाहरण के लिए चरित्र 'ए' std :: wstring जैसे "0x0041" में संग्रहीत है। यह यूटीएफ -16 प्रारूप में कैसे संग्रहीत किया जाता है? – hkBattousai
16 - ** बाइट ** ?? वाह यह एक कट्टर चरित्र एन्कोडिंग – Inverse
@ उलटा है: यही कारण है कि हर किसी को केवल ASCII का उपयोग करना चाहिए, स्मृति उपयोग पर इतना दुख नहीं होगा;) –
यूटीएफ -16 एक विशिष्ट यूनिकोड एन्कोडिंग है। std::wstring
एक स्ट्रिंग कार्यान्वयन है जो wchar_t
का उपयोग प्रत्येक चरित्र को संग्रहीत करने के लिए इसके अंतर्निहित प्रकार के रूप में करता है। (इसके विपरीत, नियमित std::string
char
का उपयोग करता है)।
wchar_t
के साथ उपयोग किया जाने वाला एन्कोडिंग अनिवार्य रूप से यूटीएफ -16 होना आवश्यक नहीं है - उदाहरण के लिए यह यूटीएफ -32 भी हो सकता है।
यह यूसीएस -2 या एस-जेआईएस या बिग 5 या ... अच्छी तरह से कुछ भी हो सकता है। – greyfade
यहां इस प्रश्न का एक बहुत अच्छा जवाब है: http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring/402918#402918 –