J'ai trouvé des questions similaires et des réponses pour Python et Javascript, mais pas pour C # ou tout autre langage compatible WinRT.
La raison pour laquelle je pense en avoir besoin, c’est que j’affiche du texte provenant de sites Web dans une application Windows 8 Store. Par exemple. é
devrait devenir é
.
Ou y a-t-il un meilleur moyen? Je n’affiche pas de sites Web ni de flux RSS, mais simplement une liste de sites Web et de leurs titres.
Je recommande d'utiliser System.Net.WebUtility.HtmlDecode et NOTHttpUtility.HtmlDecode
.
Cela est dû au fait que la référence System.Web
n'existe pas dans les applications Winforms/WPF/Console et que vous pouvez obtenir exactement le même résultat en utilisant cette classe (qui est déjà ajoutée comme référence dans tous ces projets).
Utilisation:
string s = System.Net.WebUtility.HtmlDecode("é"); // Returns é
Cela peut être utile, remplace toutes les entités (dans la mesure de mes besoins) par leur équivalent Unicode.
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;
}
Utilisez HttpUtility.HtmlDecode()
.Lead on msdn here
decodedString = HttpUtility.HtmlDecode(myEncodedString)
Codage/codage différent des entités HTML et des nombres HTML dans les applications Metro App et WP8 App.
{
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 == ó
}
{
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 == ó
}
Pour résoudre ce problème, dans WP8, j'ai implémenté le tableau dans Référence HTML ISO-8859-1 avant d'appeler System.Net.WebUtility.HtmlDecode()
.
Cela a fonctionné pour moi, remplace les entités communes et unicode.
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("'fark'", "'fark'")]
[TestCase(""fark"", "\"fark\"")]
public void should_remove_html_entities(string html, string expected)
{
html.HtmlDecode().ShouldEqual(expected);
}
Amélioration de la méthode Zumey (je ne peux pas commenter là-bas). La taille maximale de caractère est dans l'entité: & exclamation; (11). Les majuscules dans les entités sont également possibles, ex. À (Source de wiki )
public string EntityToUnicode(string html) {
var replacements = new Dictionary<string, string>();
var regex = new Regex("(&[a-zA-Z]{2,11};)");
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;
}