दिलचस्प पोस्ट
mongodb.conf bind_ip = 127.0.0.1 काम नहीं करता है लेकिन 0.0.0.0 काम करता है अपने आंतरिक उप-घटकों से एक वैध xlsx फ़ाइल कैसे ठीक से इकट्ठा करे? क्यों PerThreadLifetimeManager इस उदाहरण में प्रयोग किया जाता है? किसी दिए गए इनपुट से संबद्ध एचटीएमएल लेबल खोजें मेवेन रिपॉजिटरी में ओरेकल जेडीबीसी ड्राइवर को ढूंढें Mysqli में कई मूल्यों का सबसे अच्छा तरीका है? WebView एंड्रॉइड प्रॉक्सी क्या जीसीसी को पाइप से पढ़ने के लिए संभव है? आप "git –bare init" रिपॉजिटरी का प्रयोग कैसे करते हैं? जांचें कि स्ट्रिंग में केवल अक्षर हैं स्टैक किए गए पैनल नियंत्रणों को प्रबंधित करने के लिए TabControl बटन छिपाएं SPARQL क्वेरी से एकत्रित परिणाम सी # बनाम एफ # या एफ # बनाम सी # का उपयोग करने के क्या लाभ हैं? NSLocalizedString को किसी विशिष्ट भाषा का उपयोग करने के लिए कैसे मजबूर किया जाए क्या सीएमएडी में अनिर्दिष्ट किसी यूनियन के माध्यम से प्रकार-छेड़छाड़ की जाती है, और क्या यह सी 11 में निर्दिष्ट हो गया है?

सी ++ 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 की नई यूटीएफ-एन्कोडिंग और टाइप सुविधाओं की संभव के रूप में एक तस्वीर को पूरा करना चाहूंगा

वेब के समाधान से एकत्रित समाधान "सी ++ 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 ऐसा करने के लिए, आपको एन्कोडिंग निर्दिष्ट करने के लिए एक लोकेल का उपयोग करना होगा और इसे विभिन्न स्थानों पर व्यवस्थित करना होगा। ऐसा करना आसान है जैसा कि मैंने किया है, और मेरे पास ऐसा कोई कोड नहीं है जो आपको दिखाए कि कैसे।