6

मेरे कोड:त्रुटि स्ट्रिंग एन्कोडिंग (विंडोज 10 + दृश्य स्टूडियो 2015 + नेट 4.6)

Keys = new Dictionary<string, string>(); 
Keys.Add("Набег_0", "raid_0"); 

जब मैं Keys.ElementAt(0) मिलता है, मैं इस है: {[Íàáåã_0, raid_0]}। बेशक , जब मैं कार्यक्रम चलाने, key = "Набег_0" परिभाषित नहीं है और कार्यक्रम के एक System.Collections.Generic.KeyNotFoundException

साथ दुर्घटनाओं इस कोड को ठीक काम किया जब मैं Windows 8.1 + दृश्य था स्टूडियो 2013 + शुद्ध 3.5

कैसे मैं इसे ठीक करना ?

+0

आपके जैसे ध्वनि हमेशा बग था। किसी भी तरह कुंजी Íàáåã_0 Ha6er_0 के बजाय तत्व शून्य पर है। – jdweng

+0

कुंजी रूसी में लिखी गई हैं। इसका उद्देश्य अंग्रेजी अर्थ प्राप्त करना है। विंडोज 10 + में नवीनीकरण करने से पहले .NET 4.6 + विजुअल स्टूडियो 2015 कोड पूरी तरह से काम करता है। यह स्पष्ट रूप से देखा जाता है कि नया दृश्य स्टूडियो अब रूसी भाषा को नहीं समझता है। विंडोज या .NET दोष दे सकते हैं। मैं अपने सभी मैनुअल को अंग्रेजी भाषा में नहीं बदलना चाहता, क्योंकि इसमें कार्यक्रम में बहुत सारे बदलाव की आवश्यकता होगी। पी एस एस ऑटो अनुवाद के लिए खेद है – lantsev1981

+1

यह एन्कोडिंग है। ऐसा लगता है कि आपके पास यूनिकोड वर्ण हैं। एएससीआई एन्कोडिंग के लिए स्ट्रीम क्लास डिफ़ॉल्ट। ऐसा लगता है कि आपको कक्षाओं में से एक में यूनिकोड एन्कोडिंग निर्दिष्ट करना है। – jdweng

उत्तर

6

आप किसी भी तरह सी # संकलक कि अपने स्रोत कोड कोड पेज 1251 में लिखा गया था आश्वस्त, पूर्वी यूरोप और रूस में डिफ़ॉल्ट सिस्टम कोड पृष्ठ। आमतौर पर टेक्स्ट फ़ाइल के कारण utf-8 BOM अनुपलब्ध होता है। यह स्पष्ट नहीं हुआ कि यह कैसे हुआ, शायद आपने विजुअल स्टूडियो में निर्मित एक के अलावा फ़ाइल को एक टेक्स्ट एडिटर के साथ बनाया है। हो सकता है कि यह स्रोत नियंत्रण से उलझा हुआ हो, यूनिक्स पृष्ठभूमि वाले लोग बीओएम को छोड़ दें।

ओपन दृश्य स्टूडियो में स्रोत फ़ाइल और सुनिश्चित करें कि यह अभी भी सही ढंग से पढ़ता है। फिर फ़ाइल> सेव करें का उपयोग करें, सेव बटन पर तीर पर क्लिक करें, "एन्कोडिंग के साथ" चुनें और "यूनिकोड (यूटीएफ -8 हस्ताक्षर के साथ) चुनें"।

यह भी सुनिश्चित करें कि डिफ़ॉल्ट अभी भी अच्छा है। फ़ाइल> उन्नत सहेजें विकल्प> यदि आवश्यक हो तो एन्कोडिंग बदलें। यदि आप आदत से एक और पाठ संपादक का उपयोग करते हैं तो आप इसे कॉन्फ़िगर करना चाहते हैं ताकि यह बीओएम के साथ फाइलों को बचा सके।

+0

यूटीएफ -8 में फ़ाइलों को दोबारा सहेजने में मदद मिली, लेकिन अभी भी यह स्पष्ट नहीं हुआ कि यह कैसे हुआ कि मेरी सभी फाइलें एएनएसआई में थीं। संभवतः टीएफएस के लिए दोष देना। अब मुझे यूटीएफ -8 एन्कोडिंग की उपस्थिति के लिए सभी फाइलों को ब्राउज़ करना होगा, और प्रोजेक्ट ... आपकी मदद के लिए बहुत बहुत धन्यवाद! – lantsev1981

+0

यह 1251 कोडपेज में फ़ाइलों के साथ भी विजुअल स्टूडियो 2015 से पहले सही काम किया। यह विजुअल स्टूडियो में बग प्रतीत होता है जैसा कि अगले उत्तर में सुना गया था। – tyger

5

मैं, मेरे मामले में यह ReSharper जो रिफैक्टरिंग "अलग फाइल करने के लिए कदम वर्ग" लागू करने के बाद में विंडोज़ -1251 मेरी फ़ाइलों को बचाया था एक ही मुद्दा है।

मैं इस परीक्षण का उपयोग किया है UTF-8 में रेपो में अपने सभी सीएस फ़ाइलों को कनवर्ट करने।

[Test] 
    public void UpdateEncoding() 
    { 
     string path = @"C:\dev\Cash\src"; 
     foreach (var file in Directory.GetFiles(path, "*.cs", SearchOption.AllDirectories)) 
     { 
      if (HasBom(file)) 
       continue; 

      Console.WriteLine(file); 

      var content = File.ReadAllText(file, Encoding.GetEncoding("windows-1251")); 
      File.WriteAllText(file, content, Encoding.UTF8); 
     } 
    } 

    private bool HasBom(string file) 
    { 
     using (var strm = new FileStream(file, FileMode.Open)) 
     { 
      foreach (var b in Encoding.UTF8.GetPreamble()) 
      { 
       if (strm.ReadByte() != b) 
        return false; 
      } 

      return true; 
     } 
    } 
+0

मुझे यकीन नहीं है, लेकिन Resharper कैश साफ़ करने से इस समस्या को हल करने में मदद मिल सकती है। – chromigo

0

मुझे यह समस्या स्थानीय परियोजना के साथ भी मिल रही है जो Win8.1/VS2013 में पूरी तरह से काम करती है। तो यह टीएफएस या किसी अन्य भंडार से संबंधित नहीं है। यूटीएफ -8 में सहेजने में मदद करता है। इसके अलावा, मेरे पास एक रूसी स्थानीयकृत विजुअल स्टूडियो है जिसे भाषा पैक द्वारा अंग्रेजी में अपडेट किया गया था (स्थानीयकृत आईडीई और एमएसडीएन से नफरत है)।

4

यह दृश्य स्टूडियो 2015 रिलीज़ संस्करण में एक ज्ञात बग है। https://github.com/dotnet/roslyn/issues/4022 देखें। यह पहले से ही तय हो गई है और टूलसेट के अगले संस्करण में उपलब्ध हो जाएगा (1,1)

+0

उपयोगी जानकारी के लिए धन्यवाद! – lantsev1981

4

आप स्रोत कोड एन्कोडिंग बदलने के लिए नहीं करना चाहते हैं, तो आप एन्कोडिंग तत्व .csproj फ़ाइल में जोड़ सकते हैं। यह मेरे लिए मदद की (<PropertyGroup> तत्व में जोड़ा):

<CodePage>1250</CodePage>

लेकिन निश्चित रूप से सिर्फ एक अस्थायी हैक, कई परियोजनाओं के साथ समाधान के लिए बेकार।

+0

यह हैक मेरे दृश्य स्टूडियो डिजाइनर को "प्रकार नहीं ढूंढ सका" त्रुटियों के साथ मर जाता है। –

+1

मैं दृढ़ता से अद्यतन 1 आरसी अद्यतन करने की अनुशंसा करता हूं जो इस कष्टप्रद बग को ठीक करता है (संस्करण 14.0.24627.00)। – vasek

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