WebClient DownloadString UTF-8不能显示国际字符

20

我试图将网站的HTML保存为一个字符串。该网站包含国际字符(ę、ś、ć等),尽管我设置了编码为UTF-8,但它们仍未保存到字符串中。

这是我的代码:

using (WebClient client = new WebClient())
{
    client.Encoding = Encoding.UTF8;
    string htmlCode = client.DownloadString("http://www.filmweb.pl/Mroczne.Widmo");
}

当我将“htmlCode”打印到控制台时,即使在原始HTML中它们正确显示,国际字符也不会正确显示。

非常感谢任何帮助。

2个回答

29

我曾经遇到同样的问题。看起来是因为 client.DownloadString 没有使用 UTF-8 编码字符。使用 client.DownloadData 并使用 Encoding.UTF8.GetString 对返回数据进行编码可以解决该问题。

using (WebClient client = new WebClient())
{
     var htmlData = client.DownloadData("http://www.filmweb.pl/Mroczne.Widmo");
     var htmlCode = Encoding.UTF8.GetString(htmlData);
}

很不幸,这对我仍然无效。即使是一个简单的字符串 specialChar = "ĉ" 也无法工作,所以我怀疑是字符串的问题?我对编码不太了解,但还是谢谢你的回答。—编辑— 我觉得可能是我的打印方法有问题,我会再跟你联系,因为这可能是你给我的正确答案。 - mrybak3
好的,完全有效,谢谢!我只是根据控制台输出来判断,在表单中它显示正确。奇怪。无论如何,谢谢! - mrybak3

1
你正在用最困难的方式实现它。 WebClient 上有一个 Encoding 属性,可以设置为 Encoding.UTF8

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community
OP已经在问题中尝试了这个。 - General Grievance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接