एक आसान दृष्टिकोण (कच्चे Win32 एपीआई MultiByteToWideChar का उपयोग करने से) ATL conversion helpers उपयोग करने के लिए, CA2CW जैसा होगा। आप कोड पेज (निर्माता में दूसरा पैरामीटर) के रूप में CP_UTF8 निर्दिष्ट कर सकते हैं, यूनिकोड से UTF-8 यूनिकोड UTF-16 में बदलने के लिए: यूनिकोड में बनाता है कि
CreateDirectoryW(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
नोट (डिफ़ॉल्ट लोगों होना चाहिए जो इन दिन), CreateDirectory सिर्फ CreateDirectoryW के लिए विस्तारित, तो मैं बस खत्म होने वाली "डब्ल्यू" ड्रॉप और (IMHO, अधिक पठनीय) CreateDirectory का प्रयोग करेंगे:
CreateDirectory(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
स्रोत
2012-01-14 18:18:42
ओह। कोई भी ऐसा क्यों चाहेंगे? मुझे लगता है कि हम अब विंडोज एमई के पीछे हैं (जो एएनएसआई एपीआई की आवश्यकता के लिए आखिरी विंडोज संस्करण था)। उन्हें पहले से ही मर जाना चाहिए, खासकर नव विकसित अनुप्रयोगों के लिए। – Joey
आप यूटीएफ -8 स्ट्रिंग कहां से प्राप्त कर रहे हैं? यूटीएफ -16 स्ट्रिंग्स के साथ पूरी तरह से काम करने के लिए अपने एप्लिकेशन को कन्वर्ट करना बहुत आसान है, क्योंकि तथाकथित व्यापक संस्करण विंडोज एपीआई फ़ंक्शंस की आवश्यकता होती है। और जैसा कि जॉय कहते हैं, * हमेशा * विस्तृत संस्करणों को कॉल करें ('डब्ल्यू' प्रत्यय के साथ), एएनएसआई संस्करण नहीं। वे दशकों से अप्रचलित रहे हैं। –
@ जॉय: क्योंकि सी (++) पुस्तकालयों (मानक लाइब्रेरी समेत) का एक भयानक बहुत कुछ 'wchar_t'- आधारित तारों की बजाय' char'- आधारित तारों के साथ काम करना पसंद करता है। यदि विंडोज पूरी तरह से यूटीएफ -8 का समर्थन करता है, तो आप यूटीएफ -8 और यूटीएफ -16 के बीच हर समय कनवर्ट करने के बजाय अपने कार्यक्रम में यूटीएफ -8 का उपयोग कर सकते हैं। – dan04