2016-06-08 18 views
-3

Ich versuche, diese Webseite mit C# WebClient herunterladen .. Jetzt funktioniert es perfekt mit Python urllib2 aber mit C# Web-Client gibt es diese seltsamen Zeichen in der Ausgabedatei ..C# WebClient merkwürdige Charaktere

ich versucht habe, als auch unter Verwendung von Encoding mit WebClient-Klasse, aber es hat nicht funktioniert ..

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); 
    } 

dies die Ausgabe mit diesen seltsamen Zeichen ist

‹âå²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 

Was soll ich tun, um den HTML-Code zu sehen, der gesendet wird?

+0

oder dies: http://bet.hkjc.com/racing/pages/odds_wp.aspx?date=09- 06-2016 & venue = HV & lang = en – user3752779

+0

Bitte zeigen Sie die gleiche Anstrengung beim Schreiben Ihrer Frage, die Sie erwarten, dass jemand die Frage beantwortet. Vielleicht ein Code, wie Sie die Seite "herunterladen". Beispiel für die seltsamen Charaktere und so weiter. – Peter4499

+0

Das ist definitiv nicht UTF8 - die Seite scheint chinesisch zu sein und UTF8 unterstützt es nicht.Propagably Unicode sollte für Sie arbeiten – Peter4499

Antwort

0

Sie betrachten einen komprimierten Byte-Stream. Sie können mit curl durch Inspektion der Header der HTTP-Antwort, zum Beispiel sagen:

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

aber die Entwicklerkonsole Ihres Browsers das gleiche zeigen:

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 

Hinweis die Content-Encoding: zu sagen gzip. Dies bedeutet, dass das Ergebnis, das Sie erhalten haben, mit dem gzip-Algorithmus komprimiert wird. Das Standard-WebClient kann nicht damit umgehen, aber mit einer einfachen Unterklasse kann die WebClient neue Tricks:

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; 
    } 
} 

Auf den HttpWebRequest eine Eigenschaft vorhanden AutomaticDecompression, dass, wenn auf true gesetzt ist, wird für uns die Dekompression kümmern .

Wenn Sie die Unterklasse WebClient setzen Sie Ihren Code zu verwenden, wird wie folgt aussehen:

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

Die Codierung UTF8 korrekt ist, wie Sie auch in der Kopfzeile für die Content-Type Einstellung sehen.

Der obere Teil der HTML-Datei wird wie folgt aussehen:

<html> 
<head> 
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE10"/> 
    <meta name="application-name" content="香港賽馬會"/> 
    <title>香港賽馬會</title>