[c++] सी ++ 11 में स्ट्रिंग अक्षर के लिए यूनिकोड एन्कोडिंग


0 Answers

Question

संबंधित प्रश्न के बाद, मैं सी ++ 11 में नए चरित्र और स्ट्रिंग शाब्दिक प्रकारों के बारे में पूछना चाहता हूं। ऐसा लगता है कि अब हमारे पास चार प्रकार के अक्षर और पांच प्रकार के स्ट्रिंग अक्षर हैं। चरित्र प्रकार:

char     a =  '\x30';         // character, no semantics
wchar_t  b = L'\xFFEF';       // wide character, no semantics
char16_t c = u'\u00F6';       // 16-bit, assumed UTF16?
char32_t d = U'\U0010FFFF';   // 32-bit, assumed UCS-4

और स्ट्रिंग अक्षर:

char     A[] =  "Hello\x0A";         // byte string, "narrow encoding"
wchar_t  B[] = L"Hell\xF6\x0A";      // wide string, impl-def'd encoding
char16_t C[] = u"Hell\u00F6";        // (1)
char32_t D[] = U"Hell\U000000F6\U0010FFFF"; // (2)
auto     E[] = u8"\u00F6\U0010FFFF"; // (3)

सवाल यह है: क्या \x / \u / \U वर्ण संदर्भ सभी स्ट्रिंग प्रकारों के साथ स्वतंत्र रूप से संयोज्य हैं? क्या सभी स्ट्रिंग प्रकार निश्चित-चौड़ाई हैं, यानी सरणी में अक्षर के रूप में सटीक रूप से कई तत्व होते हैं, या \x / \u / \U संदर्भों को बाइट्स की एक चर संख्या में विस्तारित किया जाता है? क्या u"" और u8"" तारों में एन्कोडिंग char16_t x[] = u"\U0010FFFF" हैं, उदाहरण के लिए मैं char16_t x[] = u"\U0010FFFF" कह सकता हूं, और गैर-बीएमपी char16_t x[] = u"\U0010FFFF" दो-इकाई यूटीएफ 16 अनुक्रम में एन्कोड हो जाता है? और इसी तरह u8 ? में (1), क्या मैं आपके साथ अकेले सरोगेट लिख सकता हूं? अंत में, क्या स्ट्रिंग फ़ंक्शंस एन्कोडिंग में से कोई भी है (यानी वे चरित्र-जागरूक हैं और अमान्य बाइट अनुक्रमों का पता लगा सकते हैं)?

यह एक ओपन-एंडेड प्रश्न का थोड़ा सा है, लेकिन मैं नए यूटीएफ-एन्कोडिंग और नई सी ++ 11 की सुविधाओं की सुविधा के रूप में एक तस्वीर को पूरा करना चाहता हूं।






Related