2012-05-10 25 views
16

मैं निम्नलिखित कोड है:स्ट्रिंग क्यों नहीं है। संदर्भ के आधार पर लगातार समन्वयित करें?

string input = "ç"; 
string normalized = input.Normalize(NormalizationForm.FormD); 
char[] chars = normalized.ToCharArray(); 

मैं दृश्य स्टूडियो 2010, .net4 के साथ इस कोड का निर्माण, एक 64 बिट्स विंडोज़ 7

मैं (मंच एक इकाई परीक्षण परियोजना में इसे चलाने पर: किसी भी दो संदर्भों में सीपीयू) और chars की सामग्री की जांच:

  • दृश्य स्टूडियो इकाई परीक्षण: वर्ण { 231 } शामिल हैं।
  • ReSharper: वर्णों में { 231 } शामिल हैं।
  • NCrunch: वर्णों में { 99, 807 } शामिल हैं।

msdn documentation में, मुझे विभिन्न व्यवहार प्रस्तुत करने वाली कोई जानकारी नहीं मिली।

तो, मुझे अलग-अलग व्यवहार क्यों मिलते हैं? मेरे लिए एनसीआरंच व्यवहार अपेक्षित है, लेकिन मैं दूसरों के लिए इसकी अपेक्षा करता हूं।

संपादित करें: मैंने वापस 3.5 पर स्विच किया और अभी भी एक ही समस्या है।

+0

हम्म, मुझे विजुअल स्टूडियो के साथ {99, 807} मिलता है ... इसका मतलब यह होगा कि आपकी परियोजना की कॉन्फ़िगरेशन के बारे में कुछ है ... शायद। – zmilojko

+0

@zmilojko। आपके परीक्षण के लिए धन्यवाद। मुझे एक खाली नई परियोजना में आपके जैसा ही परिणाम मिलते हैं। तो मैं दो परियोजनाओं (csproj पर winmerge) के बीच मतभेदों की जांच कर रहा हूं, लेकिन अभी तक प्रासंगिक नहीं मिला, जो कि इस प्रश्न को पोस्ट करने का कारण था: समझें कि कौन सा संदर्भ एक अलग व्यवहार को प्रेरित कर सकता है। – remio

+5

प्रत्येक मामले में 'Thread.CurrentThread.CurrentCulture' क्या है? – AakashM

उत्तर

7

String.Normalize(NormalizationForm) documentation में यह कहा गया है कि

द्विआधारी प्रतिनिधित्व normalizationForm पैरामीटर द्वारा निर्दिष्ट सामान्य रूप में है।

जो मतलब है कि आप दोनों ही मामलों पर formd सामान्य का उपयोग किया था, इसलिए CurrentCulture और इस तरह वास्तव में कोई फर्क नहीं करना चाहिए।

एकमात्र चीज जो बदल सकती है, फिर, मैं क्या सोच सकता हूं "ç" चरित्र है। उस चरित्र को चरित्र एन्कोडिंग के अनुसार व्याख्या किया जाता है जिसे या तो विजुअल स्टूडियो स्रोत कोड फ़ाइलों के लिए माना जाता है या कॉन्फ़िगर किया जाता है। संक्षेप में, मुझे लगता है कि एनसीआरंच दूसरों की तुलना में अलग-अलग स्रोत फ़ाइल एन्कोडिंग मान रहा है।

एनसीआरंच मंच पर त्वरित खोज के आधार पर, कुछ यूटीएफ -8 -> यूटीएफ -16 रूपांतरण का उल्लेख किया गया था, इसलिए मैं इसे जांचूंगा।

+1

वास्तव में, मैं स्रोत/रनटाइम कोड में te 'ç' वर्ण के एन्कोडिंग पर जोरदार संदेह कर रहा था। मैंने बिना किसी भाग्य के स्रोत फ़ाइल के एन्कोडिंग के साथ खेलना शुरू कर दिया। फिर, मैंने बाहरी फाइल से स्ट्रिंग को पढ़ने की कोशिश की, जो तब तक असफल रहा जब तक कि मैंने अपने एन्कोडिंग को 'यूटीएफ -8' पर मजबूर नहीं किया। अंत में, मैंने 'इनपुट' की मेरी घोषणा को 'स्ट्रिंग इनपुट = नई स्ट्रिंग (नई [] {(char) 231}) में अपडेट किया;), और ... यह काम करता है! – remio