WebClient.DownloadString()结果与某些网站存在编码问题!波斯语

本文关键字:存在 网站 编码 问题 波斯语 DownloadString 结果 WebClient | 更新日期: 2023-09-27 18:28:41

我想打开一个网站并阅读它的来源。所以我写了这个代码:

WebClient client = new WebClient();
htmlCode = client.DownloadString("http://www.varzesh3.com");

但我得到了一个垃圾数据。我也添加了这些代码,但仍然不起作用。

client.Encoding = Encoding.UTF8; client.Headers.Add("charset", "utf-8");

此外,我使用了这些代码,但没有一个不起作用:

byte[] raw = client.DownloadData("http://www.varzesh3.com");
string webData1 = Encoding.ASCII.GetString(raw);
string webData2 = Encoding.BigEndianUnicode.GetString(raw);
string webData3 = Encoding.Unicode.GetString(raw);
string webData4 = Encoding.UTF32.GetString(raw);
string webData5 = Encoding.UTF7.GetString(raw);
string webData6 = Encoding.UTF8.GetString(raw);

注意:我可以打开并阅读任何其他使用波斯语的网站,但我无法打开www.varzesh3.com你能帮帮我吗?

WebClient.DownloadString()结果与某些网站存在编码问题!波斯语

该站点的结果被压缩。你需要先解压缩它。点击此处了解更多信息。现在,通过使用自定义MyWebClient,您将拥有:

using (var client = new MyWebClient { Encoding = Encoding.UTF8 })
{
    var test = client.DownloadString("http://www.varzesh3.com/");
}

这是因为网站使用gzip来压缩输出。你应该解压缩它

using (var hc = new HttpClient())
using (var stream = await hc.GetStreamAsync(@"http://www.varzesh3.com/"))
using (var gzstream = new GZipStream(stream, CompressionMode.Decompress))
using (var reader = new StreamReader(gzstream))
{
    var text = await reader.ReadToEndAsync();
    // do what you want with text
}