2012-11-21 30 views
24

में एचटीएमएल इकाइयों को यूनिकोड अक्षरों में कनवर्ट करना मुझे पाइथन और जावास्क्रिप्ट के लिए समान प्रश्न और उत्तर मिलते हैं, लेकिन सी # या किसी अन्य WinRT संगत भाषा के लिए नहीं।सी #

मुझे लगता है कि मुझे इसकी आवश्यकता है, क्योंकि मैं विंडोज 8 स्टोर ऐप में वेबसाइटों से प्राप्त टेक्स्ट प्रदर्शित कर रहा हूं। जैसे éé बनना चाहिए।

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

+0

डुप्लिकेट: http://stackoverflow.com/questions/5783817/convert-character-entities-to-their-unicode-equivalents –

+1

वास्तव में यह नहीं है। उनके पास एक अलग मुद्दा था। – Remy

उत्तर

42

पर मैं System.Net.WebUtility.HtmlDecode और का उपयोग करना चाहिये नहींHttpUtility.HtmlDecode

यह इस तथ्य के कारण है कि System.Web संदर्भ विनफॉर्म/डब्ल्यूपीएफ/कंसोल अनुप्रयोगों में मौजूद नहीं है और आप इस वर्ग का उपयोग कर सटीक उसी परिणाम प्राप्त कर सकते हैं (जिसे पहले से ही उन सभी परियोजनाओं में संदर्भ के रूप में जोड़ा गया है)।

उपयोग:

string s = System.Net.WebUtility.HtmlDecode("é"); // Returns é 
+0

डीकोड नहीं करता है मुझे लगता है कि, मुझे लगता है कि केवल सबसे सरल उपयोग के लिए था संस्थाएं ... – Remy

+4

"आप इस वर्ग का उपयोग कर सटीक परिणाम प्राप्त कर सकते हैं" - असंगत। केवल एचटीपीयूटीटीटी कार्यान्वयन WP12 पर एक एस्ट्रोफ़े के रूप में ' को सही ढंग से डीकोड करेगा। –

+0

मेरे मामले में, 'HttpUtility.HtmlDecoded' सही चीज़ करता है। –

6

उपयोग HttpUtility.HtmlDecode() .Read MSDN here

decodedString = HttpUtility.HtmlDecode(myEncodedString) 
+0

हाँ, ध्यान दें कि WinForms या कंसोल एप्लिकेशन के लिए आपको पहले System.Web असेंबली का संदर्भ जोड़ना होगा। –

+0

हाय, मैंने इस समाधान की कोशिश की लेकिन यह '& lbrace' जैसे वर्णों को डीकोड नहीं करता है; ':( –

+0

@ l19 क्या यह एक मान्यता प्राप्त एचटीएमएलटीटी है? मुझे इसे [सूची] (http: //en.wikipedia) में नहीं मिल रहा है। संगठन/wiki/list_of_XML_and_HTML_character_entity_references)। मैंने इसे विकासशील W3C spec में ढूंढने का प्रबंधन किया था, हालांकि शायद यह डीकोड नहीं किया गया है। – crush

3

अलग कोडिंग/HTML संस्थाओं और मेट्रो अनुप्रयोग और WP8 App में HTML संख्या की एन्कोडिंग।

विंडोज रनटाइम मेट्रो अनुप्रयोग
{ 
    string inStr = "ó"; 
    string auxStr = System.Net.WebUtility.HtmlEncode(inStr); 
    // auxStr == ó 
    string outStr = System.Net.WebUtility.HtmlDecode(auxStr); 
    // outStr == ó 
    string outStr2 = System.Net.WebUtility.HtmlDecode("ó"); 
    // outStr2 == ó 
} 

साथ

विंडोज फोन 8,0

{ 
    string inStr = "ó"; 
    string auxStr = System.Net.WebUtility.HtmlEncode(inStr); 
    // auxStr == ó 
    string outStr = System.Net.WebUtility.HtmlDecode(auxStr); 
    // outStr == ó 
    string outStr2 = System.Net.WebUtility.HtmlDecode("ó"); 
    // outStr2 == ó 
} 

इस को हल करने के साथ, WP8 में, मैं मेज HTML ISO-8859-1 Reference में System.Net.WebUtility.HtmlDecode() कॉल करने से पहले लागू किया है।

10

यह उपयोगी हो सकता है, सभी को (जहां तक ​​मेरी आवश्यकताएं जाती हैं) इकाइयों को उनके यूनिकोड समकक्ष के साथ बदल देता है।

public string EntityToUnicode(string html) { 
     var replacements = new Dictionary<string, string>(); 
     var regex = new Regex("(&[a-z]{2,5};)"); 
     foreach (Match match in regex.Matches(html)) { 
      if (!replacements.ContainsKey(match.Value)) { 
       var unicode = HttpUtility.HtmlDecode(match.Value); 
       if (unicode.Length == 1) { 
        replacements.Add(match.Value, string.Concat("&#", Convert.ToInt32(unicode[0]), ";")); 
       } 
      } 
     } 
     foreach (var replacement in replacements) { 
      html = html.Replace(replacement.Key, replacement.Value); 
     } 
     return html; 
    } 
+1

मेरे लिए काम करें मामला, लेकिन मैंने "var regex = new regex (" (& [az] {2,6};) ") के लिए रेगेक्स संपादित किया;" 5 से अधिक एचटीएमएल चरित्र (जैसे $ eacute;) – forumma

+0

मैं रेगेक्स को 'var regex = new Regex ("(& [a-zA-Z] {2,7} में बदलने का सुझाव भी दूंगा ;) "); 'ताकि' एटिल्ड 'जैसे वर्ण शामिल हों। – chrisofspades

0

यह मेरे लिए काम करता है, दोनों सामान्य और यूनिकोड इकाइयों को प्रतिस्थापित करता है।

private static readonly Regex HtmlEntityRegex = new Regex("&(#)?([a-zA-Z0-9]*);"); 

public static string HtmlDecode(this string html) 
{ 
    if (html.IsNullOrEmpty()) return html; 
    return HtmlEntityRegex.Replace(html, x => x.Groups[1].Value == "#" 
     ? ((char)int.Parse(x.Groups[2].Value)).ToString() 
     : HttpUtility.HtmlDecode(x.Groups[0].Value)); 
} 

[Test] 
[TestCase(null, null)] 
[TestCase("", "")] 
[TestCase("&#39;fark&#39;", "'fark'")] 
[TestCase("&quot;fark&quot;", "\"fark\"")] 
public void should_remove_html_entities(string html, string expected) 
{ 
    html.HtmlDecode().ShouldEqual(expected); 
}