मैं सी ++ 11 की नई यूनिकोड कार्यक्षमता की खोज कर रहा हूं, और other C++11 encoding questions बहुत उपयोगी रहा है, मेरे पास cppreference से निम्न कोड स्निपेट के बारे में कोई प्रश्न है। कोड लिखता है और फिर तुरंत यूटीएफ -8 एन्कोडिंग के साथ सहेजी गई एक टेक्स्ट फ़ाइल पढ़ता है।सी ++ में यूटीएफ -8 पढ़ना/लिखना/प्रिंट करना 11
// Write
std::ofstream("text.txt") << u8"z\u6c34\U0001d10b";
// Read
std::wifstream file1("text.txt");
file1.imbue(std::locale("en_US.UTF8"));
std::cout << "Normal read from file (using default UTF-8/UTF-32 codecvt)\n";
for(wchar_t c; file1 >> c;) // ?
std::cout << std::hex << std::showbase << c << '\n';
मेरा प्रश्न काफी बस, यही कारण है कि एक wchar_t
for
पाश में की जरूरत है? एक u8
स्ट्रिंग शाब्दिक को सरल char *
का उपयोग करके घोषित किया जा सकता है और यूटीएफ -8 एन्कोडिंग के बिट लेआउट को सिस्टम की चौड़ाई को सिस्टम को बताना चाहिए। ऐसा लगता है कि यूटीएफ -8 से यूटीएफ -32 (इसलिए wchar_t
) में कुछ स्वचालित रूपांतरण है, लेकिन यदि ऐसा है, तो रूपांतरण आवश्यक क्यों है?
यह कई चीजों पर निर्भर करता है। – sehe
'wchar_t' क्योंकि' wifstream' प्रयोग किया जाता है प्रयोग किया जाता है, और 'wifstream' प्रदर्शन (की आवश्यकता होती है _at अमानक एपीआई की एक अच्छी संख्या में कॉल IIRC least_) उल्लेखनीय है, सही UTF8 व्यवहार अत्यंत कठिन एक सांत्वना आवेदन में Windows का उपयोग कर असंभव नहीं तो है कि आप "कुछ स्वचालित रूपांतरण" का जिक्र करते हैं। मेरा मुद्दा उस स्वचालित रूपांतरण (जैसा कि एक विशेष मंच के लिए लागू किया गया है) और स्पष्ट, पोर्टेबल, लोकेल-स्वतंत्र, यूनिकोड रूपांतरण 'codecvt_utf8_utf16' द्वारा प्रदान किया गया अंतर) के बीच का अंतर दिखाना था। – Cubbi