Comment obtenir le codage HTML en C #?

c# encoding html html-agility-pack webclient

Question

J'essaie d'obtenir la prononciation de certains mots à partir d'un dictionnaire Web. Par exemple, dans le code suivant, je veux obtenir la prononciation de good de http://collinsdictionary.com

( HTTP Agility Pack est utilisé ici)

static void test()
{
    String url = "http://www.collinsdictionary.com/dictionary/english/good";
    WebClient client = new WebClient();
    client.Encoding = System.Text.Encoding.UTF8;
    String html = client.DownloadString(url);
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    HtmlAgilityPack.HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id=\"good_1\"]/div[1]/h2/span/text()[1]");
    if (node == null)
    {
        Console.WriteLine("XPath not found.");
    }
    else
    {
        Console.WriteLine(node.WriteTo());
    }
}

je m'attendais à

static void test()
{
    String url = "http://www.collinsdictionary.com/dictionary/english/good";
    WebClient client = new WebClient();
    client.Encoding = System.Text.Encoding.UTF8;
    String html = client.DownloadString(url);
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    HtmlAgilityPack.HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id=\"good_1\"]/div[1]/h2/span/text()[1]");
    if (node == null)
    {
        Console.WriteLine("XPath not found.");
    }
    else
    {
        Console.WriteLine(node.WriteTo());
    }
}

mais ce que je pourrais obtenir au mieux est

static void test()
{
    String url = "http://www.collinsdictionary.com/dictionary/english/good";
    WebClient client = new WebClient();
    client.Encoding = System.Text.Encoding.UTF8;
    String html = client.DownloadString(url);
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    HtmlAgilityPack.HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id=\"good_1\"]/div[1]/h2/span/text()[1]");
    if (node == null)
    {
        Console.WriteLine("XPath not found.");
    }
    else
    {
        Console.WriteLine(node.WriteTo());
    }
}

Comment bien faire les choses?

Réponse acceptée

Le problème ne réside pas dans votre analyse du texte, mais plutôt dans la sortie de la console. Si vous le faites depuis une application en ligne de commande, vous pouvez définir le codage de sortie de la console sur Unicode:

Console.OutputEncoding = System.Text.Encoding.Unicode;

Vous devez également vous assurer que votre police dans la console est une police prise en charge par Unicode. Voir cette réponse pour plus d'informations.


Réponse populaire

Si vous connaissez le codage de la page (par exemple, System.Text.Encoding.UTF8);

string html = DownloadSmallFiles_String(url, System.Text.Encoding.UTF8, 20000);

ou utilisez la détection de codage automatique (dépend de la réponse du serveur)

string html = DownloadSmallFiles_String(url, System.Text.Encoding.UTF8, 20000);

et enfin charger le html

string html = DownloadSmallFiles_String(url, System.Text.Encoding.UTF8, 20000);

Essayez ci-dessous le code

string html = DownloadSmallFiles_String(url, System.Text.Encoding.UTF8, 20000);



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi