Проблема кодирования WebClient в Windows Phone 8 SDK

Я пытаюсь разобрать html с сайта, используя кодировку windows-1254. но все турецкие символы показаны так: like

Где актуальная проблема? Я попробовал это:

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

как функция это:

public string ReplaceText(string _text)
        {
            _text = _text.Replace("Ä°", "İ").Replace("ı", "ı").Replace("ü", "ü").Replace("ÅŸ", "ş").Replace("Å", "Ş").Replace("ç", "ç").Replace("ö", "ö").Replace("ÄŸ", "ğ").Replace("Ç", "Ç").Replace("Ö", "Ö").Replace("Ãœ", "Ü");
            return _text;
        }

также это заголовки:

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";

(с iso-8859-9, utf8 тоже)

и вот как я использую веб-клиент:

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

обработчик:

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";
            }

2 ответа

Решение

Вместо того чтобы использовать стандартный подход, зачем вам создавать собственный класс, соответствующий вашим потребностям, который будет обрабатывать etconding.

Это поможет вам сгенерировать класс, вот так:

и тогда все, что вам нужно сделать

webClient.Encoding = CustomEncoding();

Дайте мне знать, как это происходит (:

Почему вы установили кодировку UTF-8, если знаете ее windows-1254? Исправление довольно простое, вам просто нужно установить правильную кодировку в WebClient,

wb.Encoding = Encoding.GetEncoding(1254);

или же

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

Кроме того, ваш ReplaceText метод больше не нужен.

РЕДАКТИРОВАТЬ: Конечно, Windows Phone не поддерживает эту кодировку, вы должны реализовать любую кодировку, кроме utf-8 или utf-16 самостоятельно. К счастью, есть простой способ сделать это, вам просто нужно использовать программу, описанную здесь, чтобы создать свой собственный класс кодирования.

Другие вопросы по тегам