none
InnerHtml caracteres especiais RRS feed

  • Pergunta

  • Pessoal,

    Tenho uma aplicação em c# que está lendo uma página utilizando o HtmlAgilityPack e estou conseguindo fazer o que preciso, porém quando utilizo o InnerHTML pra me retornar o texto, quando tem algum caractere especial, por exemplo um "Ç" ou um "ã" ele não reconhece. Quando debugo fica com um caractere "?" no lugar.

    Ao procurar na internet verifiquei que o problema é resolvido utilizando o HttpUtility.HtmlDecode(). Porém, tentei utilizar e continuou acontecendo o mesmo problema. 

    Alguma dica para conseguir pegar o texto do jeito que vem?

    Obrigado!

    domingo, 18 de maio de 2014 23:49

Respostas

  • Tenta assim então....acho que o encoding da página ta vindo errado.

    HtmlWeb htmlweb = new HtmlWeb();
    web.AutoDetectEncoding = false;
    web.OverrideEncoding = Encoding.UTF8;
    
                HtmlDocument doc = htmlweb.Load("http://www.globo.com/");
    
    HtmlNode[] links = doc.DocumentNode.SelectNodes("//a]").ToArray();
    
    for (int i = 0; i < links.Length; i++)
                {
                    
                    string texto = WebUtility.HtmlDecode(links[i].InnerText);
    }

    Testa e posta aqui seu resultado ;)

    Abraços !


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    quarta-feira, 21 de maio de 2014 13:45

Todas as Respostas

  • Amigo, boa tarde.

    Por acaso você pode mandar seu código aqui para que possamos dar uma olhada ?

    Não sou especialista nesse helper, mas acredito que há algo na hora de instanciar suas classes do HTMLAgilityPack que possa ser configurado para um Encoding específico, e nesse momento você está omitindo tal configuração.

    Abraços !


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    terça-feira, 20 de maio de 2014 17:49
  • Opa, claro, dá uma olhada:

    HtmlWeb htmlweb = new HtmlWeb();
    
                HtmlDocument doc = htmlweb.Load("http://www.globo.com/");
    
    HtmlNode[] links = doc.DocumentNode.SelectNodes("//a]").ToArray();
    
    for (int i = 0; i < links.Length; i++)
                {
                    
                    string texto = WebUtility.HtmlDecode(links[i].InnerText);
    }

    Tentei com o InnerHTML e o com InnerText. Os dois retornam tipo assim: "Cota��o"

    terça-feira, 20 de maio de 2014 18:53
  • Diego,

    O método de Load não tem esses overloads. Talvez estejamos confundindo por ter algum outro método Load. Olha vou postar aqui as opções:

    


    terça-feira, 20 de maio de 2014 20:36
  • (separei em dois posts já que só é permitido postar duas imagens por post)

    terça-feira, 20 de maio de 2014 20:37
  • Tenta assim então....acho que o encoding da página ta vindo errado.

    HtmlWeb htmlweb = new HtmlWeb();
    web.AutoDetectEncoding = false;
    web.OverrideEncoding = Encoding.UTF8;
    
                HtmlDocument doc = htmlweb.Load("http://www.globo.com/");
    
    HtmlNode[] links = doc.DocumentNode.SelectNodes("//a]").ToArray();
    
    for (int i = 0; i < links.Length; i++)
                {
                    
                    string texto = WebUtility.HtmlDecode(links[i].InnerText);
    }

    Testa e posta aqui seu resultado ;)

    Abraços !


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    quarta-feira, 21 de maio de 2014 13:45
  • Obrigado Diegoooo!

    Utilizando UTF8 não funcionou, porém utilizando Default funcionou normalmente:

    htmlweb.AutoDetectEncoding = false;
    htmlweb.OverrideEncoding = Encoding.Default;

    quarta-feira, 21 de maio de 2014 15:01