2010-05-17 7 views
19

कई स्रोतों में इसका उल्लेख किया गया है कि सी ++ 0x में यूनिकोड (प्रकार और शाब्दिक समेत) के लिए बेहतर भाषा-स्तर समर्थन शामिल होगा।सी ++ 0x में क्या नया यूनिकोड फ़ंक्शन हैं?

यदि भाषा इन नई सुविधाओं को जोड़ने जा रही है, तो यह मानना ​​स्वाभाविक है कि मानक लाइब्रेरी भी होगी। हालांकि, मैं वर्तमान में नई मानक लाइब्रेरी में कोई संदर्भ नहीं ढूंढ पा रहा हूं।

  1. नए पुस्तकालय मानक तरीकों UTF-16, आदि के लिए UTF-8 कन्वर्ट करने के लिए प्रदान करता है: मैं इन उत्तरों के लिए इस सवाल का जवाब पता लगाने के लिए की उम्मीद?
  2. क्या नई लाइब्रेरी कंसोल (या कंसोल से फ़ाइलों से) फ़ाइलों को यूटीएफ -8 लिखने की अनुमति देती है। यदि हां, तो क्या हम कोउट का उपयोग कर सकते हैं या हमें कुछ और चाहिए?
  3. नए पुस्तकालय "बुनियादी" कार्यक्षमता शामिल करता है जैसे:, बाइट गिनती और एक UTF-8 स्ट्रिंग की लंबाई की खोज अपर-केस/लोअर केस में कनवर्ट करने
(इस स्थान प्रभाव मानता है?)

अंत में, इनमें से कोई भी कार्य किसी भी लोकप्रिय कंपाइलर जैसे जीसीसी या विजुअल स्टूडियो में उपलब्ध है?

मैंने सूचना की तलाश करने की कोशिश की है, लेकिन मुझे कुछ भी नहीं मिल रहा है। मैं वास्तव में यह सोचने लगा हूं कि शायद इन चीजों को अभी भी तय नहीं किया गया है (मुझे पता है कि सी ++ 0x प्रगति पर एक काम है)।

उत्तर

13

क्या नई लाइब्रेरी यूटीएफ -8 को यूटीएफ -16 में बदलने के लिए मानक तरीकों को प्रदान करती है?
नहीं। नई लाइब्रेरी std::codecvt पहलुओं को प्रदान करती है जो iostream से निपटने के दौरान आपके लिए रूपांतरण करते हैं। आईएसओ/आईईसी टीआर 1 9 76 9: 2004, सी यूनिकोड तकनीकी रिपोर्ट, नए मानक में लगभग वर्बैटिम शामिल है।

क्या नई लाइब्रेरी कंसोल (या कंसोल से फाइलों से) फ़ाइलों को यूटीएफ -8 लिखने की अनुमति देती है। यदि हां, तो क्या हम कोउट का उपयोग कर सकते हैं या हमें कुछ और चाहिए?
हां, आप सिर्फ सही codecvt पहलू के साथ cout imbue होगा। नोट करें कि कंसोल को उन वर्णों को सही ढंग से प्रदर्शित करने की आवश्यकता नहीं है

क्या नई लाइब्रेरी में "मूलभूत" कार्यक्षमता शामिल है जैसे: बाइट गिनती और यूटीएफ -8 स्ट्रिंग की लंबाई, ऊपरी-मामले/निचले हिस्से में परिवर्तित करना -केस (क्या यह लोकेशंस के प्रभाव पर विचार करता है?)
AFAIK कि कार्यक्षमता मौजूदा C++ 03 मानक के साथ मौजूद है। std::toupper और std::towupper पाठ्यक्रम के पिछले संस्करणों के समान ही कार्य करता है। ऐसे कोई भी नए कार्य नहीं हैं जो विशेष रूप से इसके लिए यूनिकोड पर काम करते हैं।

यदि आपको इन प्रकार की चीजों की आवश्यकता है, तो आपको अभी भी बाहरी पुस्तकालय पर भरोसा करना होगा - <iostream> प्राथमिक टुकड़ा जिसे पुनर्निर्मित किया गया था।

क्या, विशेष रूप से, नए मानक में यूनिकोड के लिए जोड़ा गया है?

  • यूनिकोड शाब्दिक, u8 के माध्यम से "", यू "", और यू "" UTF-8 के लिए
  • std::char_traits कक्षाएं, UTF-16, और UTF-32
  • mbrtoc16, c16rtomb, mbrtoc32, और c32rtomb आईएसओ/आईईसी टी.आर. से 19,769: 2004
  • std::codecvt (जो कोड सेट रूपांतरण के लिए codecvt तंत्र का उपयोग करता है) लोकेल पुस्तकालय
  • std::wstring_convert वर्ग टेम्पलेट के लिए पहलुओं
  • std::wbuffer_convert, जो कच्चे सरणी को छोड़कर wstring_convert के समान होता है, स्ट्रिंग नहीं।
+1

ध्यान दें कि विशेष रूप से 'std :: toupper()' यूनिकोड को संभालने के लिए अपरिचित है। कभी-कभी एक इनपुट इनपुट को * एकाधिक * आउटपुट वर्णों में परिवर्तित करने की आवश्यकता होगी। मामले में प्वाइंट: 'टॉपर (' ß ') '' एसएस "देने की आवश्यकता होगी। 'टॉपर()' (हमेशा एक ही चरित्र लौट रहा है) इसे वितरित नहीं कर सकता है। – DevSolar

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