2016-01-02 2 views
1

Я хотел бы открыть веб-сайт и прочитать его источник. поэтому я написал этот код:Результат WebClient.DownloadString() имеет проблемы с кодировкой с некоторыми веб-сайтами! с персидским (фарси) языком

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 не могли бы вы помочь мне?

+0

Я думаю, что этот веб-сайт неправильно настроен так, что его заголовки не соответствовать его содержанию ... –

+0

спасибо за руководство меня, но как я могу решить эту проблему? – user3703112

+0

Ну, вы можете скачать необработанные байты вместо этого и попытаться выяснить, какую кодировку вы должны использовать * –

ответ

1

Результат этого сайта сжимается. Сначала вам нужно распаковать его. More info here. Теперь с помощью customMyWebClient, вы будете иметь:

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

thanksssss :) теперь это отлично работает :) – user3703112

0

Это происходит потому, что веб-сайт использует 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 
} 
Смежные вопросы