2016-06-08 3 views
-3

Я пытаюсь загрузить эту веб-страницу с помощью C# WebClient .. Теперь это работает отлично с питона urllib2 но с C# веб-клиент дает эти странные символы в выходной файл ..C# WebClient Странные персонажи

я пытался используя кодирование с классом WebClient как хорошо, но он не работает на всех ..

public static string GetWebURL() 
    { 
     string url = "http://bet.hkjc.com"; 
     WebClient webClient = new WebClient(); 
     webClient.Encoding = Encoding.UTF8; 
     string html = webClient.DownloadString(url); 
     File.WriteAllText("page.html", html); 
    } 

это выход с этими странными персонажами

‹âå²Qtñw‰pUðñõQuòñtVPÒÕ×7vÖ×w qÂH˜è*„%æg–dæç%æèë»ú)ÙñrÂ(N.Ê,(Q(©,HµU*I­(ÑÃJ,K„ˆ*Ùq)((â€U*TÆ’e‰E ©y‰I9©ŽÉÉ©ÅÅÎùy%Eù9 ¶i‰9Å©Ö %â„¢i Xâ€h"(É-P°U(ÃÃŒKÉ/×ËÉON¹H/£(5M¯¸4©¸¤HÃ\SlHu°kPËœkP¼Ÿ£¯+PP/L‘ÂËœ4&µÂ?MCI_IS®+%?713Ã/17¨ ɘfd!¸ zJšÚ†P«Sò“KsSóJô &MA V¨ŸKòô’RK‚s2ÜŠ€ªô2‹}òÓóó445¡ÊÃ=­Wâ€Z“˜œ t|zj^jQbN<Ø1z䁚9‰y鶩yJ_ÂP-ˆÔšœchˆe¦‚ µ\H&[×rÙèC’€0ÂJ%à „ ÷‚üüP9Ud¦MÃÃÔÌØÈÖM×ÃÈ25² ÷ô³V·†(ÃŽM-JOM 

Что мне нужно сделать, чтобы увидеть html, который отправляется?

+0

или это: http://bet.hkjc.com/racing/pages/odds_wp.aspx?date=09- 06-2016 & meeting = HV & lang = ru – user3752779

+0

Просьба продемонстрировать то же самое при написании вашего вопроса, что вы ожидаете, что кто-то ответит на вопрос. Возможно, какой-то код того, как вы загружаете страницу. Пример странных символов и так далее. – Peter4499

+0

Это определенно не UTF8 - сайт выглядит китайским, а UTF8 его не поддерживает. Возможно, Юникод должен работать на вас – Peter4499

ответ

0

Вы смотрите на сжатый поток байтов. Вы можете сказать, проверяя заголовки ответа HTTP, например, с curl:

curl -X HEAD -i http://bet.hkjc.com/

но Консоль разработчика Вашего браузера покажет то же самое:

HTTP/1.1 200 OK 
Cache-Control: public, max-age=120, must-revalidate 
Content-Length: 3615 
Content-Type: text/html; charset=utf-8 
Content-Encoding: gzip 
Expires: Wed, 29 Jun 2016 08:01:06 GMT 
Vary: Accept-Encoding 
Server: Microsoft-IIS/7.0 
X-AspNet-Version: 2.0.50727 
X-Powered-By: ASP.NET 
Date: Wed, 29 Jun 2016 08:00:14 GMT 
Via: 1.1 stjbwbwa52 
Accept-Ranges: bytes 

Примечание Content-Encoding: сказать gzip. Это означает, что полученный результат сжат с помощью алгоритма gzip. Стандарт WebClient не может справиться с этим, но с простым подклассом WebClient может делать новые трюки:

public class DecompressWebClient:WebClient 
{ 
    // moved common logic here 
    public DecompressWebClient() 
    { 
     this.Encoding = Encoding.UTF8; 
    } 

    // This is the factory to create the webrequest 
    protected override WebRequest GetWebRequest(Uri address) 
    { 
     // get the default one 
     var request = base.GetWebRequest(address); 
     // see if it is a HttpWebRequest 
     var httpReq = request as HttpWebRequest; 
     if (httpReq != null) 
     { 
      // add extra capabilities, like decompression 
      httpReq.AutomaticDecompression = DecompressionMethods.GZip; 
     } 
     return request; 
    } 
} 

На HttpWebRequest существует свойство AutomaticDecompression что, когда установлено верно, будет заботиться о декомпрессии для нас ,

Когда вы кладете подклассы WebClient использовать ваш код будет выглядеть следующим образом:

string url = "http://bet.hkjc.com"; 
using(WebClient webClient = new DecompressWebClient()) 
{ 
    string html = webClient.DownloadString(url); 
    File.WriteAllText("page.html", html); 
} 

Кодирование UTF8 является правильным, так как вы можете видеть в заголовке для установки Content-Type.

В верхней части HTML-файла будет выглядеть следующим образом:

<html> 
<head> 
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE10"/> 
    <meta name="application-name" content="香港賽馬會"/> 
    <title>香港賽馬會</title> 
Смежные вопросы