मैं एक पोर्टेबल लाइब्रेरी लिख रहा हूं जो फाइलों और निर्देशिकाओं से संबंधित है। मैं अपने इनपुट (निर्देशिका पथ) और आउटपुट (फ़ाइल पथ) के लिए यूटीएफ -8 का उपयोग करना चाहता हूं। समस्या यह है कि, विंडोज़ मुझे यूटीएफ -16-जो-इस्तेमाल-टू-बी-यूसीएस -2, और कोडपेज के बीच एक विकल्प देता है। इसलिए मुझे अपने सभी यूटीएफ -8 तारों को यूटीएफ -16 में परिवर्तित करना है, उन्हें WinAPI में पास करना है, और परिणामों को वापस यूटीएफ -8 में परिवर्तित करना है। सी ++ 11 केवल <locale>
लाइब्रेरी प्रदान करने के लिए प्रतीत होता है, जो मुझे समझा जाता है, छोड़कर, पूर्वनिर्धारित विशेषज्ञता में से कोई भी यूटीएफ -8 को आंतरिक (यानी मेरी तरफ) कोडिंग के रूप में उपयोग नहीं करता है - निकटतम यूटीएफ -16-टू- यूटीएफ -8, जो है जो मैं चाहता हूं के विपरीत विपरीत है। तो यहां पहला सवाल है:यूटीएफ -8 का उपयोग तारों के आंतरिक प्रतिनिधित्व के रूप में करने के लिए सी ++ 11 लोकेल सुविधाओं का उपयोग कैसे करें?
1) WinCI कॉल के लिए मेरे यूटीएफ -8 तारों को यूटीएफ -16 में परिवर्तित करने के लिए कोडेकवैट चीज़मैजिज का उपयोग कैसे करें, और यूटीएफ -16 यूटीएफ -8 के परिणाम वापस आ जाए?
एक और समस्या: मैं लिनक्स को भी लक्षित कर रहा हूं। लिनक्स पर, कई अलग-अलग स्थानों के लिए बहुत अच्छा समर्थन है - और मैं कोई अलग नहीं होना चाहता हूं। उम्मीद है कि हर कोई अपनी लिनक्स मशीनों पर यूटीएफ -8 का उपयोग करेगा, लेकिन इसकी कोई सख्त गारंटी नहीं है। तो मैंने सोचा कि उपर्युक्त विंडोज-विशिष्ट व्यवहार को विस्तारित करना और हमेशा यूटीएफ -8-टू-सिस्टम-लोकेल-कोडिंग करना एक अच्छा विचार होगा। सिवाय इसके कि मुझे नहीं लगता कि वर्तमान सिस्टम एन्कोडिंग प्राप्त करने के लिए सी ++ 11 की <locale>
लाइब्रेरी में कोई तरीका है! डिफ़ॉल्ट std :: लोकेल कन्स्ट्रक्टर निर्दिष्ट-द्वारा-स्वयं लोकेल बनाता है, और यदि मैं ऐसा नहीं करता, तो यह क्लासिक "सी" लोकेल लौटाता है। और मुझे कोई अन्य गेटर्स नहीं है जो मुझे पता है। तो यहां दूसरा प्रश्न है:
2) वर्तमान सिस्टम लोकेल का पता कैसे लगाएं? <locale>
में कुछ? हो सकता है कि कुछ मानक सी लाइब्रेरी फ़ंक्शन, या (कम पोर्टेबल लेकिन इस मामले में ठीक है) POSIX API में कुछ?
: दूसरा पैराग्राफ है ** नहीं ** पहला सवाल का हिस्सा !!! की [स्ट्रिंग, u16string और u32string के बीच कन्वर्ट] – Xirdus
संभव डुप्लिकेट (http://stackoverflow.com/questions/7232710/convert-between-string-u16string-u32string) – tclamb
@tclamb नहीं वास्तव में एक नकली है, लेकिन उस सवाल का जवाब होगा मेरे लिए सहायक हो। लिंक के लिए धन्यवाद। लेकिन सवाल 2) अभी भी खड़ा है। 'Std :: स्थान (" ") का नाम()': – Xirdus