यदि मैं अच्छी तरह से समझता हूं, तो यूटीएफ -8 टेक्स्ट को स्टोर करने के लिए स्ट्रिंग और wstring दोनों का उपयोग करना संभव है।std :: स्ट्रिंग और यूटीएफ -8 एन्कोडेड यूनिकोड
- चार के साथ
, ASCII वर्ण एक एकल बाइट ले, कुछ चीनी अक्षरों 3 या 4, आदि ले जिसका मतलब है कि
str[3]
जरूरी 4 चरित्र को इंगित नहीं करता है। wchar_t
एक ही बात है, लेकिन पात्रों प्रति इस्तेमाल किया बाइट्स की कम से कम राशि के साथ हमेशा 2 (बजायchar
के लिए 1) है, और एक 3 या 4 बाइट विस्तृत चरित्र 2wchar_t
ले जाएगा।
सही?
तो, अगर मैं string::find_first_of()
या string::compare()
, आदि का उपयोग करना चाहता हूं तो ऐसी अजीब एन्कोडेड स्ट्रिंग के साथ? क्या ये काम करेगा ? क्या स्ट्रिंग क्लास इस तथ्य को संभालती है कि वर्णों में एक चर आकार है? या मुझे केवल उन्हें डमी फीचर-कम बाइट एरे के रूप में उपयोग करना चाहिए, इस मामले में मैं wchar_t[]
बफर के लिए जाना चाहूंगा।
std::string
कि, दूसरा सवाल संभाल नहीं होता है: वहाँ है कि कि UTF-8 एन्कोडिंग संभाल सकता है, ताकि str[3]
वास्तव में 3 चरित्र को इंगित करता है (जो 4 लंबाई 1 से एक बाइट सरणी होगा स्ट्रिंग कक्षाएं उपलब्ध कराने के पुस्तकालय हैं)?
ध्यान दें कि भले ही 'str [3] 'चौथा कोड बिंदु था, यह चौथा उपयोगकर्ता-अनुमानित चरित्र नहीं है। – delnan
@ डेलनान _ क्षमा करें (मैंने अभी wchar_t, विंडोज़ और यूटीएफ -16 के बारे में एक उदाहरण लेख चुना है)। चूंकि इसे संपादित करने में बहुत देर हो चुकी है, मैंने टिप्पणी हटा दी है, और यहां "विवादास्पद" लिंक के बिना हिस्सा वापस आ गया है: _ मुझे लगता है कि 'wchar_t' का आकार कार्यान्वयन-परिभाषित है, इसलिए _not_ हमेशा 2 बाइट्स। इसके अलावा (आईआईआरसी) विंडोज यूटीएफ -16 की तरह कुछ स्टोर करने के लिए इसका उपयोग करता है, यूटीएफ -8 नहीं। Http://en.wikipedia.org/wiki/Wide_character –