2012-02-19 8 views
21

विजुअल स्टूडियो 2010 में "कैरेक्टर सेट" विकल्प के बारे में मेरा प्रश्न। सेट नहीं
- - उपयोग यूनिकोड वर्ण सेट
- उपयोग बहु बाइट वर्ण सेटविजुअल स्टूडियो 2010 में "कैरेक्टर सेट" विकल्प के बारे में

मैं क्या "वर्ण सेट" में तीन विकल्पों के बीच अंतर जानना चाहता हूँ

चरित्र
निर्धारित किया है।
और यदि मैं उनमें से कुछ चुनता हूं, तो अंग्रेजी के अलावा अन्य भाषाओं के लिए समर्थन को प्रभावित करेगा। (आरटीएल भाषाओं की तरह)।

उत्तर

24

यह एक संगतता सेटिंग है, जिसका उद्देश्य विरासत कोड के लिए है जो विंडोज के पुराने संस्करणों के लिए लिखा गया था जो यूनिकोड सक्षम नहीं थे। विंडोज 9एक्स परिवार में संस्करण, विंडोज एमई आखिरी और व्यापक रूप से अनदेखा था। "सेट नहीं" या "मल्टी-बाइट कैरेक्टर सेट का उपयोग करें" के साथ, सभी विंडोज एपीआई फ़ंक्शंस जो एक तर्क के रूप में स्ट्रिंग लेते हैं, उन्हें थोड़ा संगतता सहायक फ़ंक्शन को दोबारा परिभाषित किया जाता है जो char* तारों को wchar_t* स्ट्रिंग्स, एपीआई के मूल स्ट्रिंग प्रकार का अनुवाद करता है।

इस तरह का कोड गंभीर रूप से डिफ़ॉल्ट सिस्टम कोड पृष्ठ सेटिंग पर निर्भर करता है। कोड पेज 8-बिट वर्णों को यूनिकोड में मैप करता है जो फ़ॉन्ट ग्लाइफ का चयन करता है। आपका प्रोग्राम केवल सही टेक्स्ट उत्पन्न करेगा जब आपके कोड को चलाने वाली मशीन में सही कोड पृष्ठ होगा। यदि कोड पृष्ठ मेल नहीं खाता है तो अक्षरों का मूल्य> = 128 गलत हो जाएगा।

हमेशा आधुनिक कोड के लिए "यूनिकोड कैरेक्टर सेट का उपयोग करें" का चयन करें। विशेष रूप से जब आप दाएं से बाएं लेआउट वाले भाषाओं का समर्थन करना चाहते हैं और आपके पास अपनी dev मशीन पर एक अरबी या हिब्रू कोड पृष्ठ नहीं चुना गया है। अपने कोड में std::wstring या wchar_t[] का उपयोग करें। वास्तविक आरटीएल लेआउट प्राप्त करने के लिए CreateWindowEx() कॉल में WS_EX_RTLREADING शैली ध्वज को चालू करने की आवश्यकता है।

9

हंस ने पहले से ही सवाल का जवाब दिया है, लेकिन मुझे इन सेटिंग्स को उत्सुक नाम मिलते हैं। (वास्तव में क्या सेट किया गया है नहीं किया जा रहा है, और अन्य दो विकल्प तो समान ध्वनि क्यों करते हैं?) है कि के बारे में:

  • "यूनिकोड" यहाँ विशेष रूप से UCS-2 एन्कोडिंग के लिए माइक्रोसॉफ्ट बात है। हंस द्वारा वर्णित यह अनुशंसित और गैर-कोडपृष्ठ-निर्भर है। _UNICODE नामक एक संबंधित C++ # परिभाषित ध्वज है।
  • "मल्टी-बाइट कैरेक्टर सेट" (उर्फ एमबीसीएस) यहां उनके पूर्व अंतरराष्ट्रीय टेक्स्ट-एन्कोडिंग योजना का वर्णन करने के लिए आधिकारिक माइक्रोसॉफ्ट वाक्यांश है। जैसा कि हंस ने वर्णन किया है, अलग-अलग भाषाओं का वर्णन करने वाले विभिन्न एमबीसीएस कोडपेज हैं। एन्कोडिंग "बहु-बाइट" हैं जिनमें कुछ या सभी वर्णों को एकाधिक बाइट्स द्वारा दर्शाया जा सकता है। (कुछ कोडपेज यूटीएफ -8 के समान चर-लंबाई एन्कोडिंग का उपयोग करते हैं।) आपका सामान्य कोडपेज अभी भी सभी ASCII वर्णों को एक-बाइट के रूप में प्रदर्शित करेगा। _MBCS
  • "सेट नहीं किया गया" नामक ध्वज वाला एक समान सी ++ # परिभाषित ध्वज स्पष्ट रूप से with_UNICODE संकलित करने के लिए संदर्भित करता है और न ही _MBCS # परिभाषित किया जाता है। इस मामले में विंडोज प्रति सख्त एक-बाइट प्रति चरित्र एन्कोडिंग के साथ काम करता है। (एक बार फिर इस मामले में कई अलग-अलग कोडपेज उपलब्ध हैं।)

Difference between MBCS and UTF-8 on Windows इन मुद्दों में बहुत अधिक विस्तार से जाता है।

+0

बहुत खराब माइक्रोसॉफ्ट यूटीएफ -8 के लिए समर्थन जोड़ने से इंकार कर देता है – MarcusJ

संबंधित मुद्दे