Come ottenere la codifica HTML direttamente in C #?

c# encoding html html-agility-pack webclient

Domanda

Sto cercando di ottenere la pronuncia per certe parole da un dizionario web. Ad esempio, nel seguente codice, voglio ottenere la pronuncia di good da http://collinsdictionary.com

( HTTP Agility Pack è usato qui)

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());
    }
}

stavo aspettando

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());
    }
}

ma quello che potrei ottenere al meglio è

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());
    }
}

Come farlo bene?

Risposta accettata

Il problema non è nell'analisi del testo, piuttosto è un problema con l'output della console. Se si esegue questa operazione da un'app della riga di comando, è possibile impostare la codifica dell'output della console come Unicode:

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

È inoltre necessario assicurarsi che il font nella console sia un font con supporto Unicode. Vedi questa risposta per maggiori informazioni.


Risposta popolare

Se conosci la codifica della pagina (ad es. System.Text.Encoding.UTF8);

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

o utilizzare il rilevamento automatico della codifica (dipende dalla risposta del server)

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

e infine caricare l'html

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

Prova sotto il codice

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché