2009-07-12 12 views
13

मैं वर्तमान में Digital Mars D भाषा के विनिर्देश की खोज कर रहा हूं, और मुझे आदिम चरित्र प्रकारों की पूरी प्रकृति को समझने में थोड़ी परेशानी हो रही है। Learn to Tango With D पुस्तक इस क्षेत्र में भाषा की क्षमताओं और सीमाओं पर समान अस्पष्ट है।डी में आदिम चरित्र प्रकार की सीमाएं क्या हैं?

प्रकार के रूप में the website पर दिए गए हैं:

 
char; // unsinged 8 bit UTF-8 
wchar; // unsigned 16 bit UTF-16 
dchar; // unsigned 32 bit UTF-32 

के बाद से हम जानते हैं कि यूनिकोड परिवर्तन के सबसे (UTF) स्वरूप एनकोडिंग एक चर बिट-चौड़ाई के साथ केरेक्टर को अभिव्यक्त, इसका मतलब यह है कि डी में एक चार केवल उन मानों को शामिल किया जा सकता है जो 8 बिट्स में फिट होंगे, या जब आप इसे डबल बाइट वर्ण देते हैं तो यह मशीन की भौतिक स्मृति में विस्तारित होता है? शायद कुछ अन्य संभावनाएं हैं, जैसे कि अगली सबसे उचित प्रकार में स्वत: कास्टिंग जैसे आप चर को ओवरलोड करते हैं?

उदाहरण के लिए, मैं एक संपादक में यूटीएफ -8 char का उपयोग करना चाहता हूं और चीनी में टाइप करना चाहता हूं। क्या यह बस खत्म हो जाएगा, या क्या यह यूनिकोड वर्णों से अधिक 'सही', जैसे सी # में सौदा करने में सक्षम है? यूनिकोड द्वारा समर्थित किसी भी भाषा के साथ काम करने की अनुमति देने के लिए अभी भी गोंद कोड प्रदान करना आवश्यक होगा?

मैं किसी भी विशिष्ट जानकारी की सराहना करता हूं जो आप इस प्रकार के कवर के तहत काम करते हैं, और उनकी सीमाओं से निपटने के लिए किसी भी सामान्य सर्वोत्तम अभ्यास सलाह के बारे में बता सकते हैं।

+0

रखें "जब से हम जानते हैं कि यूनिकोड मानक एक चर बिट-चौड़ाई के साथ पात्रों का प्रतिनिधित्व करता है "-> क्या आप utf8 का मतलब है? – elcuco

+0

हां, मेरा मतलब यूएफटी एन्कोडिंग है। गलतफहमी के लिए खेद है। – IanGilham

उत्तर

15

एक एकल char या wchar एक यूटीएफ code unit का प्रतिनिधित्व करता है। इसका मतलब है कि, अपने आप से, char या तो एएससीआईआईआई प्रतीक (0-127) का प्रतिनिधित्व कर सकता है या एक यूनिकोड चरित्र (code point) का प्रतिनिधित्व करने वाले यूटीएफ -8 अनुक्रम का हिस्सा बन सकता है। केवल dchar प्रकार पूरे यूनिकोड चरित्र का प्रतिनिधित्व कर सकता है, क्योंकि यूनिकोड में 65536 से अधिक कोड पॉइंट हैं।

स्ट्रिंग प्रकार (string, wstring और dstring, जो केवल चरित्र प्रकार के गतिशील सरणियों कर रहे हैं) का एक प्रकार कास्टिंग स्वचालित रूप से संबंधित UTF प्रतिनिधित्व करने के लिए अपनी सामग्री को परिवर्तित नहीं होंगे। ऐसा करने के लिए है, तो आप कार्यों toUTF8, toUTF16 और toUTF32std.utf से (या toString/toString16/toString32tango.text.convert.Utf से यदि आप टैंगो का उपयोग करें) का उपयोग करना चाहिए।

उपयोगकर्ताओं ने स्ट्रिंग क्लास लागू किए हैं जो स्वचालित रूप से सबसे अधिक स्मृति-कुशल प्रतिनिधित्व का उपयोग करेंगे जो प्रत्येक वर्ण को एक कोड इकाई में मैप कर सकता है। यह एक न्यूनतम स्मृति ओवरहेड के साथ त्वरित टुकड़ा और अनुक्रमण की अनुमति देता है। क्रिस्टोफर ई मिलर द्वारा ऐसा एक कार्यान्वयन mtext है।

अतिरिक्त पठन:

  • डी
  • Text in D, पर विकिपीडिया के प्रवेश डैनियल द्वारा में String handling अनुभाग
+2

ऐसा लगता है, मेरी समस्या कोड इकाइयों और कोड बिंदुओं के बीच अंतर को समझने में थी। आखिरी लिंक सब कुछ अच्छी तरह से बताता है। धन्यवाद। – IanGilham

+0

मिस्टर के रिट-अप के पूरक पर डिट्टो। – BCS

+1

मुझे यह सुनकर खुशी हुई कि लेख ने आपकी मदद की है। फिर भी, मैं यहां पहुंचने से पहले इसका उत्तर देने के लिए साइबरशैडो को शाप देता हूं! : पी –

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