Problème d'encodage WebClient du kit de développement logiciel Windows Phone 8

c# html-agility-pack visual-studio-2010 windows-phone-7 windows-phone-8

Question

J'essaie d'analyser le code HTML d'un site à l'aide du jeu de caractères Windows-1254. mais tous les caractères turcs montrés comme ceci: � �

Où est le problème actuel? J'ai essayé ceux-ci:

webClient.Encoding = System.Text.Encoding.UTF8
webClient.Encoding = System.Text.Encoding.GetString("UTF-8");

comme fonction ceci:

public string ReplaceText(string _text)
        {
            _text = _text.Replace("Ä°", "Ä°").Replace("ı", "ı").Replace("ü", "ü").Replace("ÅŸ", "ÅŸ").Replace("Ã…", "Åž").Replace("ç", "ç").Replace("ö", "ö").Replace("ÄŸ", "ÄŸ").Replace("Ç", "Ç").Replace("Ö", "Ö").Replace("Ãœ", "Ãœ");
            return _text;
        }

aussi cette en-têtes:

webClient.Headers["User-Agent"] = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
webClient.Headers["Accept-Charset"] = "windows-1254,utf-8;q=0.7,*;q=0.7";

(avec iso-8859-9, utf8 aussi)

Et voici comment j'utilise le client Web:

WebClient wb = new WebClient();         
            wb.Headers["User-Agent"] = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
            wb.Headers["Accept-Charset"] = "windows-1254,utf-8;q=0.7,*;q=0.7";
            wb.DownloadStringAsync(new Uri("http://www.site.com"));
            wb.Encoding = System.Text.Encoding.UTF8;
            wb.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DSC);

gestionnaire:

HtmlDocument htmlDoc = new HtmlDocument();

            htmlDoc.LoadHtml(e.Result);

            var inputs = htmlDoc.DocumentNode.SelectNodes("//div[@id=\"mrln-eyhaber\"]//a");

            foreach (var input in inputs)
            {

                textarea.Text += this.ReplaceText(input.Attributes["title"].Value.ToString()) + "\n\n";
            }

Réponse acceptée

Au lieu d'utiliser l'approche standard, pourquoi ne créez-vous pas une classe personnalisée, spécifique à vos besoins, qui gérera la situation etc.

Cela vous aidera à générer la classe, comme ceci: entrez la description de l'image ici

et puis tout ce que vous avez à faire

webClient.Encoding = CustomEncoding();

Faites-moi savoir comment ça se passe (:


Réponse populaire

Pourquoi avez-vous défini le codage sur UTF-8 si vous connaissez son windows-1254? Le correctif est plutôt facile, il vous suffit de définir le codage correct dans WebClient .

wb.Encoding = Encoding.GetEncoding(1254);

ou

wb.Encoding = Encoding.GetEncoding("windows-1254");

De plus, votre méthode ReplaceText ne devrait plus être nécessaire non plus.

EDIT: Bien entendu, Windows Phone ne prend pas en charge cet encodage, vous devez implémenter vous-même un encodage autre que utf-8 ou utf-16. Heureusement, il existe un moyen simple de le faire, il vous suffit d'utiliser le programme décrit ici pour générer votre propre classe de codage.




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