【问题标题】:Windows Phone 8 SDK WebClient Encoding IssueWindows Phone 8 SDK WebClient 编码问题
【发布时间】:2013-10-05 02:38:42
【问题描述】:

我正在尝试使用 windows-1254 字符集从站点解析 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 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";
            }

【问题讨论】:

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


    【解决方案1】:

    您为什么不创建一个自定义类,而不是使用标准方法,专门针对您的需求,它将处理等问题。

    This 会帮你生成类,比如:

    然后你要做的就是

    webClient.Encoding = CustomEncoding();
    

    告诉我进展如何(:

    【讨论】:

    • 你能给我更多关于如何使用它的信息吗?我创建了一个新类并添加了代码 using Hardcodet.Silverlight.Util; 那么我将如何将它与 webClient.Encoding 一起使用?
    • 天哪,对不起,我刚刚添加了new CustomEncoding();,它现在可以工作了!非常感谢你,这是你的赏金:)
    【解决方案2】:

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

    wb.Encoding = Encoding.GetEncoding(1254);
    

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

    另外,您的 ReplaceText 方法也不再需要了。

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

    【讨论】:

    • 我确实做到了。它就是这样说的:System.ArgumentException: 'windows-1254' is not a supported encoding name.
    猜你喜欢
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多