Windows Phone 8 SDK WebClient编码问题

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

我正在尝试使用windows-1254 charset从一个站点解析html。但是所有的土耳其人字符都是这样的:�����

实际问题在哪里?我试过这些:

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的方式:

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

一般承认的答案

而不是使用标准方法,为什么不创建一个特定于您需要的自定义类,它将处理etconding。

将帮助您生成类,如下所示: 在此处输入图像描述

然后你需要做的就是

webClient.Encoding = CustomEncoding();

让我知道事情的后续 (:


热门答案

如果你知道它的windows-1254,你为什么要将编码设置为UTF-8?修复相当容易,您只需在WebClient设置正确的编码即可。

wb.Encoding = Encoding.GetEncoding(1254);

要么

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

此外,不再需要您的ReplaceText方法。

编辑:当然,Windows Phone不支持这种编码,你必须自己实现除utf-8或utf-16之外的任何编码。幸运的是,有一个简单的方法,你只需要使用这里描述的程序来生成自己的编码类。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因