2008-10-27 9 views
6

क्या किसी ने देखा है कि यदि आप क्लिपबोर्ड से एचटीएमएल पुनर्प्राप्त करते हैं, तो यह एन्कोडिंग गलत हो जाता है और अजीब पात्रों को इंजेक्ट करता है?क्लिपबोर्ड से सही ढंग से एन्कोडेड HTML कैसे प्राप्त करें?

उदाहरण के लिए

, इस तरह एक कमांड को क्रियान्वित:

string s = (string) Clipboard.GetData(DataFormats.Html) 

की तरह सामान में परिणाम:

<FONT size=-2>  <A href="/advanced_search?hl=en">Advanced 
Search</A><BR>  <A href="/preferences?hl=en">Preferences</A><BR>  <A 
href="/language_tools?hl=en">Language 
Tools</A></FONT> 

नहीं यकीन है कि कैसे Markdown इस पर कार्रवाई करेंगे, लेकिन वहाँ जिसके परिणामस्वरूप मार्कअप में अजीब अक्षर हैं ऊपर।

ऐसा प्रतीत होता है कि बग .NET ढांचे के साथ है। क्लिपबोर्ड से सही ढंग से एन्कोडेड HTML प्राप्त करने का सबसे अच्छा तरीका आपको क्या लगता है?

उत्तर

0

मुझे नहीं पता कि आपका मूल स्रोत दस्तावेज़ क्या है, लेकिन ध्यान रखें कि वर्ड और आउटलुक विभिन्न एन्कोडिंग में क्लिपबोर्ड के कई संस्करण प्रदान करते हैं। एक आमतौर पर विंडोज -1252 है और दूसरा यूटीएफ -8 है। संभवत: आप विंडोज -1252 (लैटिन -1 + स्मार्ट कोट्स) की अपेक्षा करते समय डिफ़ॉल्ट रूप से यूटीएफ -8 एन्कोडेड संस्करण को पकड़ रहे हैं? गैर-ASCII वर्ण कई अजीब लैटिन -1 उच्चारण वाले पात्रों के रूप में दिखाई देंगे। अधिकांश "स्मार्ट कोट्स" लैटिन -1 सेट में नहीं हैं और अक्सर यूटीएफ -8 में तीन बाइट होते हैं।

क्या आप निर्दिष्ट कर सकते हैं कि आप कौन सी एन्कोडिंग क्लिपबोर्ड सामग्री चाहते हैं?

3

इस मामले में यह मेरे मामले में इतना दिखाई नहीं दे रहा है। आज मैंने क्लिपबोर्ड से डेटा कॉपी करने की कोशिश की लेकिन कुछ यूनिकोड वर्ण थे। मुझे मिली डेटा जैसे कि मैं विंडोज -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 साथ और ठीक बिना आवेदन के लिए सही व्यवहार निर्धारित करने के लिए नहीं है।)
0

इस

System.Windows.Forms.Clipboard.GetText प्रयास करें (System.Windows.Forms TextDataFormat .html।);

0

डेटाफॉर्मैट्स। एचटीएमएलspecification बताता है कि यह यूटीएफ -8 में एन्कोड किया गया है। लेकिन .NET 4 फ्रेमवर्क और निचले हिस्से में एक बग है, और यह वास्तव में यूटीएफ -8 के रूप में विंडोज -1252 के रूप में पढ़ता है।

आपको गलत एन्कोडिंग का आवंटन मिलता है, 'Å', 'â' ¹ ',' Å ',' Ž ',' Å¡ ',' Å '', ž जैसे मज़ेदार/खराब वर्ण ',' ए ',' ए ',' एक ¡ ',' एक ¢ ',' एक £ ',' ¤ ',' एक ¥ ',' Â| ',' § ',' ए ' 'एक ©'

पूर्ण यहाँ स्पष्टीकरण Debugging Chart Mapping Windows-1252 Characters to UTF-8 Bytes to Latin-1 Characters

Soln: एक अनुवाद शब्दकोश बनाएँ और खोज और बदलें।