2015-08-24 7 views
9

का प्रतिनिधित्व करते हुए \ u और \ x का उपयोग करने के बीच क्या अंतर है मैंने देखा है कि \u और \x किसी अक्षर में वर्णित होने पर कुछ स्थानों पर एक दूसरे के लिए उपयोग किया जाता है।वर्ण शाब्दिक

उदाहरण '\u00A9' == '\x00A9' लिए true

का मूल्यांकन हम केवल \u उपयोग करने के लिए यूनिकोड चरित्र का प्रतिनिधित्व करने वाले नहीं कर रहे हैं? एक चरित्र का प्रतिनिधित्व करने के दो तरीके होने का क्या उपयोग है?

उत्तर

18

मैं दृढ़ता से केवल \u का उपयोग करने की अनुशंसा करता हूं, क्योंकि यह बहुत कम त्रुटि-प्रवण है।

\x, 1-4 पात्रों की खपत जब तक वे हेक्स अंक हैं - जबकि \u चाहिए हमेशा 4 हेक्स अंक के बाद किया। सी # 5 विनिर्देश, खंड 2.4.4.4 से, \x के लिए व्याकरण:

हेक्साडेसिमल-एस्केप अनुक्रम:
    \xहेक्स अंकोंहेक्स अंकोंहेक्स ऑप्ट -डिजिट ऑप्टहेक्स-अंक ऑप्ट

उदाहरण के लिए

तो:

string good = "Tab\x9Good compiler"; 
string bad = "Tab\x9Bad compiler"; 

... इसी तरह लग रही है लेकिन, बहुत अलग तार कर रहे हैं के रूप में बाद के प्रभावी रूप से है "टैब" U+9BAD "संकलक" द्वारा पीछा किया गया।

व्यक्तिगत रूप से मैं चाहता हूं कि सी # भाषा में कभी भी \x शामिल नहीं था, लेकिन वहां हम जाते हैं।

ध्यान दें कि \U भी है, जो हमेशा 8 हेक्स अंकों के बाद होता है, जिसका मुख्य रूप से गैर-बीएमपी पात्रों के लिए उपयोग किया जाता है। जबकि \u भी पहचानकर्ता में इस्तेमाल किया जा सकता बाद केवल चरित्र और स्ट्रिंग शाब्दिक में प्रयोग किया जाता है:

वहाँ \u और \x के बीच एक अन्य बड़ा अंतर है

string x = "just a normal string"; 
Console.WriteLine(\u0078); // Still refers to the identifier x 
बेशक
+0

, इस सी # है, जहां मैं उम्मीद करता हूं कि सी के क्विर्क इस _not_ की तरह मौजूद हैं। किसी भी कारण से यह "quirk" शामिल किया गया था? –

+0

धन्यवाद जॉन, आप पहचानकर्ताओं में \ u का उपयोग कर मेरे लिए नया था :) –

+0

@ कोलेजोहनसन: मुझे नहीं पता, मुझे डर है। इसके आसपास सी # 4 की कल्पना में एकमात्र एनोटेशन मेरा ही है, एक ही अलार्म व्यक्त करता है :) मुझे संदेह है कि यह * सी के साथ संगतता के लिए था - इस मामले में एक गुमराह उद्देश्य, आईएमओ। –

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