इस मामले में यह मेरे मामले में इतना दिखाई नहीं दे रहा है। आज मैंने क्लिपबोर्ड से डेटा कॉपी करने की कोशिश की लेकिन कुछ यूनिकोड वर्ण थे। मुझे मिली डेटा जैसे कि मैं विंडोज -1250 एन्कोडिंग (मेरे विंडोज़ में स्थानीय एन्कोडिंग) में एक यूटीएफ -8 एन्कोडेड फ़ाइल पढ़ूंगा।
ऐसा लगता है कि आप एक ही हैं। यदि आप एचटीएमएल डेटा को सहेजते हैं (किसी चरित्र के बाद गैर-ब्रेक करने योग्य स्थान = 0xa0 डालना याद रखें, मानक स्थान नहीं) विंडोज -1252 (या विंडोज -1250; दोनों काम करता है)। फिर इस फ़ाइल को यूटीएफ -8 फ़ाइल के रूप में खोलें और आप देखेंगे कि क्या होना चाहिए।
मेरी अन्य परियोजना के लिए मैंने एक ऐसा फ़ंक्शन बनाया जो दूषित एन्कोडिंग के साथ डेटा को ठीक करता है।
इस मामले में सरल रूपांतरण पर्याप्त होना चाहिए:
byte[] data = Encoding.Default.GetBytes(text);
text = Encoding.UTF8.GetString(data);
मेरे मूल कार्य में थोड़ा और अधिक जटिल है और यह सुनिश्चित करें कि डेटा दूषित नहीं कर रहे हैं परीक्षण होता है ...
public static bool FixMisencodedUTF8(ref string text, Encoding encoding)
{
if (string.IsNullOrEmpty(text))
return false;
byte[] data = encoding.GetBytes(text);
// there should not be any character outside source encoding
string newStr = encoding.GetString(data);
if (!string.Equals(text, newStr)) // if there is any character "outside"
return false; // leave, the input is in a different encoding
if (IsValidUtf8(data) == 0) // test data to be valid UTF-8 byte sequence
return false; // if not, can not convert to UTF-8
text = Encoding.UTF8.GetString(data);
return true;
}
मैं पता है कि यह (या सही समाधान) नहीं है लेकिन मुझे इनपुट को ठीक करने का कोई अन्य तरीका नहीं मिला है ...
संपादित: (20 जुलाई, 2017)
ऐसा लगता है कि माइक्रोसॉफ्ट पहले ही इस त्रुटि पाया है और अब इसे सही ढंग से काम करता है। मुझे यकीन नहीं है कि समस्या कुछ ढांचे में है, लेकिन मुझे यकीन है कि अब जब मैं जवाब लिखता हूं, तो एप्लिकेशन समय के साथ एक अलग ढांचे का उपयोग करता है। (अब यह 4.5 है, पिछले संस्करण 2.0 था)
(। अब मेरे सभी कोड डेटा पार्स करने में विफल रहता है एक और समस्या ठीक पहले से ही aplied साथ और ठीक बिना आवेदन के लिए सही व्यवहार निर्धारित करने के लिए नहीं है।)