दिलचस्प पोस्ट
कैसे कॉटन बायनरी मोड के रूप में व्यवहार करने के लिए? एंगल्यूल में तारीख फ़िल्टर द्वारा अवरोही क्रम स्क्रीन के बीच अंतर। AwailHeight और window.height () मैं PHP में एसक्यूएल इंजेक्शन कैसे रोक सकता हूं? Cplusplus.com में क्या गलत है? मैं स्विफ्ट में टाइप के शब्दकोश में क्लास <ClassImplementingProtocol> प्रकार के मान को कैसे संग्रहीत करूँ? क्यों दस्तावेज़.लिखित एक "बुरा अभ्यास" माना जाता है? एंड्रॉइड – किसी स्ट्रिंग के दूसरे स्ट्रिंग के हिस्से को कैसे बदलना है? यूनिक्स लाइन के अंत में कनवर्ट करने के लिए विंडोज कमांड? हिस्टोग्राम gnuplot का उपयोग कर रहा है? गूगल मानचित्र एपीआई वी 3 – सटीक एक ही जगह पर कई मार्कर मैं किसी वेबब्राउजर से एक पॉपअप को दूसरी विंडो में कैसे प्रदर्शित कर सकता हूं? jQuery: मौजूदा <ul> में <li> कैसे जोड़ें? लाइब्रेरी (डीएलएल) के लिए 'app.config' के समतुल्य किसी विशेष विशेषता के साथ गुणों की सूची कैसे प्राप्त करें?

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

संबंधित प्रश्न के बाद, मैं सी ++ 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" को दो यूनिट UTF16 अनुक्रम में एन्कोड किया जाता है? और इसी तरह u8 ? (1) में, क्या मैं अकेला अकेला \u u0026 लिख सकता हूं? अंत में, कोई भी स्ट्रिंग फ़ंक्शन एन्कोडिंग जागरूक (यानी वे चरित्र-जागरूक हैं और अमान्य बाइट अनुक्रमों का पता लगा सकते हैं)?

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

Solutions Collecting From Web of "सी ++ 11 में स्ट्रिंग लीटरल्स के लिए यूनिकोड एन्कोडिंग"

क्या सभी स्ट्रिंग प्रकारों के साथ \ x / \ u / \ U वर्ण का स्वतंत्र रूप से संयोजन योग्य है?

नंबर \x कुछ भी में इस्तेमाल किया जा सकता है, लेकिन \u और \U केवल उन तारों में उपयोग किया जा सकता है जो विशेष रूप से यूटीएफ-एन्कोडेड हैं। हालांकि, किसी भी यूटीएफ-एन्कोडेड स्ट्रिंग के लिए, \u और \U का उपयोग किया जा सकता है जैसा कि आप फिट देखते हैं

क्या सभी स्ट्रिंग प्रकार निश्चित-चौड़ाई हैं, यानी सरणियों में सटीक रूप से कई तत्व मौजूद हैं, जैसे कि शाब्दिक रूप में दिखाई देते हैं, या \ x / \ u / \ U संदर्भ में बाइट्स की एक चर संख्या में विस्तार हो जाता है?

जिस तरह से आप मतलब नहीं \x , \u , और \U स्ट्रिंग एन्कोडिंग के आधार पर परिवर्तित हो जाते हैं। उन "कोड इकाइयों" की संख्या (यूनिकोड शब्दों का उपयोग करते हुए। एक char16_t एक UTF-16 कोड इकाई है) मान स्ट्रिंग के एन्कोडिंग पर निर्भर करता है। शाब्दिक u8"\u1024" एक स्ट्रिंग तैयार कर सकता है जिसमें दो u8"\u1024" और एक शून्य टर्मिनेटर होगा। शाब्दिक u"\u1024" एक char16_t जिसमें 1 char16_t प्लस एक नल टर्मिनेटर होगा।

उपयोग की जाने वाली कोड इकाइयों की संख्या यूनिकोड एन्कोडिंग पर आधारित है।

क्या "u" और "8" स्ट्रिंग्स में एन्कोडिंग शब्दार्थ हैं, जैसे मैं कह सकता हूँ char16_t x [] = u "\ U0010FFFF", और गैर-बीएमपी कोडपॉइंट को दो यूनिट UTF16 अनुक्रम में एन्कोड किया जाता है?

u"" यूटीएफ -16 एन्कोडेड स्ट्रिंग बनाता है। u8"" एक यूटीएफ -8 एन्कोडेड स्ट्रिंग बनाता है। वे यूनिकोड विनिर्देश प्रति एन्कोडेड होंगे।

(1) में, क्या मैं अकेला अकेला \ u \ u0026 लिख सकता हूं?

बिलकुल नहीं। विनिर्देश स्पष्ट रूप से UTF-16 सरोगेट युग्म (0xD800-0xDFFF) को यूआरए या \U लिए कोडपॉइंट के रूप में प्रयोग से मना करता है।

अंत में, कोई भी स्ट्रिंग फ़ंक्शन एन्कोडिंग जागरूक (यानी वे चरित्र-जागरूक हैं और अमान्य बाइट अनुक्रमों का पता लगा सकते हैं)?

बिलकुल नहीं। खैर, मुझे दोबारा रगड़ने दे।

std::basic_string यूनिकोड एनकोडिंग के साथ सौदा नहीं करता है वे निश्चित रूप से यूटीएफ-एन्कोडेड स्ट्रिंग्स स्टोर कर सकते हैं। लेकिन वे केवल उन्हें char , char char16_t , या char char16_t अनुक्रम के रूप में सोच सकते हैं; वे उनको यूनिकोड कोडपॉइंट के अनुक्रम के रूप में नहीं सोच सकते हैं जो एक विशेष तंत्र के साथ एन्कोडेड हैं। basic_string::length() कोड इकाइयों की संख्या वापस नहीं करेगा, न कि कोड बिंदु और जाहिर है, सी मानक पुस्तकालय स्ट्रिंग कार्य पूरी तरह से बेकार हैं

यह ध्यान दिया जाना चाहिए कि युनिकोड स्ट्रिंग के लिए "लंबाई" का मतलब यह नहीं है कि कोडपॉइंट की संख्या। कुछ कोड अंक "वर्ण" (एक दुर्भाग्यपूर्ण नाम) के संयोजन कर रहे हैं, जो पिछले कोडपॉइंट के साथ संयोजन करते हैं। तो कई कोडपॉइंट एक एकल विज़ुअल कैरेक्टर में मैप कर सकते हैं।

Iostreams वास्तव में यूनिकोड-एन्कोडेड मान पढ़ और लिख सकते हैं I ऐसा करने के लिए, आपको एन्कोडिंग निर्दिष्ट करने के लिए एक लोकेल का उपयोग करना होगा और इसे विभिन्न स्थानों पर व्यवस्थित करना होगा। ऐसा करना आसान है जैसा कि मैंने किया है, और मेरे पास ऐसा कोई कोड नहीं है जो आपको दिखाए कि कैसे।