2008-09-27 8 views
7

क्या कोई मुझे कुछ महत्वपूर्ण पहलुओं को प्रदान कर सकता है, मुझे सी # में यूनिकोड तारों को संभालने के दौरान अवगत होना चाहिए?सी # में यूनिकोड तारों को संभालने के लिए सर्वोत्तम प्रथाएं क्या हैं?

उत्तर

7

सी # (और सामान्य रूप से .NET) पारदर्शी रूप से यूनिकोड तारों को संभालते हैं, और आपको तब तक विशेष कुछ नहीं करना पड़ेगा जब तक कि आपके एप्लिकेशन को विशिष्ट एन्कोडिंग के साथ फ़ाइलों को पढ़ने/लिखने की आवश्यकता न हो। उन मामलों में, आप सिस्टम में कक्षाओं का उपयोग करके प्रबंधित स्ट्रिंग को अपनी पसंद के एन्कोडिंग के बाइट एरे में परिवर्तित कर सकते हैं। टेक्स्ट। एन्कोडिंग्स नेमस्पेस।

1

केवल पढ़ने और लिखने के दौरान एन्कोडिंग के बारे में सोचें। विभिन्न एन्कोडिंग में टेक्स्ट पढ़ने और लिखने के लिए टेक्स्ट रीडर और टेक्स्ट राइटर्स का उपयोग करें। यदि आपके पास कोई विकल्प है तो हमेशा यूटीएफ -8 का उपयोग करें।

भाषाओं और संस्कृतियों द्वारा भ्रमित न हों - यह यूनिकोड से एक पूरी तरह से अलग मुद्दा है।

0

.Net अपेक्षाकृत अच्छा i18n समर्थन है। आपको वास्तव में यूनिकोड के बारे में सोचने की ज़रूरत नहीं है जितना कि सभी नेट स्ट्रिंग्स और अंतर्निर्मित स्ट्रिंग फ़ंक्शन यूनिकोड के साथ सही काम करते हैं। ध्यान में रखना एकमात्र चीज यह है कि अधिकांश स्ट्रिंग फ़ंक्शंस, उदाहरण के लिए डेटटाइम.ToString(), डिफ़ॉल्ट रूप से थ्रेड की संस्कृति का उपयोग करें जो डिफ़ॉल्ट रूप से विंडोज संस्कृति है। आप वर्तमान थ्रेड पर या प्रत्येक विधि कॉल पर स्वरूपण के लिए एक अलग संस्कृति निर्दिष्ट कर सकते हैं।

एकमात्र समय यूनिकोड एक मुद्दा है जब बाइट्स से और एन्कोडिंग/डिकोडिंग तार।

11

ध्यान रखें कि सी # तार चार, यूटीएफ -16 कोड इकाइयों के अनुक्रम हैं। वे यूनिकोड कोड-पॉइंट्स हैं। कुछ यूनिकोड कोड बिंदुओं को दो चर की आवश्यकता होती है, और आपको इन वर्णों के बीच तारों को विभाजित नहीं करना चाहिए।

इसके अलावा, यूनिकोड कोड बिंदु एक भाषा 'चरित्र' बनाने के लिए गठबंधन कर सकते हैं - उदाहरण के लिए, 'यू' चर के बाद umlat Char। तो आप मनमानी कोड बिंदुओं के बीच तारों को विभाजित नहीं कर सकते हैं।

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

0

जैसा कि बताया गया है, .NET स्ट्रिंग्स यूनिकोड को पारदर्शी रूप से संभालती है। फ़ाइल I/O के अलावा, अन्य विचार डेटाबेस परत पर होगा। उदाहरण के लिए SQL सर्वर VARCHAR (गैर-यूनिकोड) और NVARCHAR (जो यूनिकोड को संभालता है) के बीच अंतर करता है। संग्रहित प्रक्रिया मानकों पर भी ध्यान देना होगा।

2

सिस्टम। स्ट्रिंग पहले से ही यूनिकोड को आंतरिक रूप से संभाला है ताकि आप वहां शामिल हो जाएं। सबसे अच्छा अभ्यास सिस्टम को पढ़ने और लिखने के दौरान System.Text.Encoding.UTF8Encoding का उपयोग करना होगा। यह फाइलों को पढ़ने/लिखने से कहीं अधिक है, हालांकि, नेटवर्क कनेक्शन समेत डेटा स्ट्रीम करने वाली कोई भी चीज़ एन्कोडिंग पर निर्भर होगी। यदि आप डब्ल्यूसीएफ का उपयोग कर रहे हैं, तो यह ज्यादातर बाइंडिंग के लिए यूटीएफ 8 में डिफ़ॉल्ट होगा (वास्तव में अधिकांश एएससीआईआई को बिल्कुल अनुमति नहीं देते हैं)।

यूटीएफ 8 एक अच्छा विकल्प है क्योंकि यह अभी भी पूरे यूनिकोड चरित्र सेट का समर्थन करता है, क्योंकि अधिकांश ASCII चरित्र सेट के लिए यह बाइट समानता है। इस प्रकार बेवकूफ अनुप्रयोग जो यूनिकोड का समर्थन नहीं करते हैं, आपके अनुप्रयोग डेटा को पढ़ने/लिखने का कुछ मौका है। जब आप विस्तारित वर्णों का उपयोग शुरू करते हैं तो वे एप्लिकेशन केवल विफल होने लगेंगे।

सिस्टम.Text.Encoding.Unicode यूटीएफ -16 लिखेंगे जो प्रति चरित्र कम से कम दो बाइट्स है, जो इसे ASCII के साथ बड़े और पूरी तरह से असंगत बनाता है। और System.Text.Encoding.UTF32 जैसा कि आप अनुमान लगा सकते हैं अभी भी बड़ा है। मुझे यूटीएफ -16 और 32 के असली दुनिया के उपयोग के मामले के बारे में निश्चित नहीं है, लेकिन जब आपके पास बड़ी संख्या में विस्तारित वर्ण हैं तो शायद वे बेहतर प्रदर्शन करेंगे।यह सिर्फ एक सिद्धांत है, लेकिन यदि यह सत्य है, तो जापानी/चीनी डेवलपर्स एक ऐसा उत्पाद बनाते हैं जिसका मुख्य रूप से उन भाषाओं में उपयोग किया जाएगा, यूटीएफ -16/32 बेहतर विकल्प मिल सकता है।

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

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