2009-04-29 5 views
0

Je suis en train de "scrapper" mes propres pages comme un hack temporaire, en utilisant WebRequest de .NET.Est-ce que .NET WebRequest/WebResponse peut traduire les accents, les signes diacritiques et les entités correctement?

Cela fonctionne bien, mais les caractères accentués et les caractères diacritiques ne se traduisent pas correctement.

Je me demande s'il existe un moyen de les traduire correctement en utilisant les nombreuses propriétés et méthodes intégrées de .NET.

Voici le code que je utilise pour saisir les pages:

private string getArticle(string urlToGet) 
{ 

    StreamReader oSR = null; 

    //Here's the work horse of what we're doing, the WebRequest object 
    //fetches the URL 
    WebRequest objRequest = WebRequest.Create(urlToGet); 

    //The WebResponse object gets the Request's response (the HTML) 
    WebResponse objResponse = objRequest.GetResponse(); 

    //Now dump the contents of our HTML in the Response object to a 
    //Stream reader 
    oSR = new StreamReader(objResponse.GetResponseStream()); 


    //And dump the StreamReader into a string... 
    string strContent = oSR.ReadToEnd(); 

    //Here we set up our Regular expression to snatch what's between the 
    //BEGIN and END 
    Regex regex = new Regex("<!-- content_starts_here //-->((.|\n)*?)<!-- content_ends_here //-->", 
     RegexOptions.IgnoreCase); 

    //Here we apply our regular expression to our string using the 
    //Match object. 
    Match oM = regex.Match(strContent); 

    //Bam! We return the value from our Match, and we're in business. 
    return oM.Value; 
} 
+1

Désolé de ne pas commenter quelque chose de totalement différent de la question, mais vous utilisez trop de commentaires. Sérieusement. – Chris

+0

J'allais écrire ça :) –

+0

LOL. Cela a été tiré de deux sites de tutorat différents dans la journée, avec tous les commentaires en place. Je me sens toujours «sale» en prenant les commentaires écrits de quelqu'un hors du code qui n'est pas le mien. Je devrais probablement m'en remettre ... – kendor

Répondre

2

essayer d'utiliser:

System.Net.WebClient client = new System.Net.WebClient();
chaîne html = client.DownloadString (urlToGet);
chaîne décodée = System.Web.HttpUtility.HtmlDecode (html);

également, consultez client.Encoding

0

Il y a une autre façon de gérer cela, en utilisant le deuxième paramètre du constructeur StreamReader, comme ceci:

new StreamReader(webRequest.GetResponse().GetResponseStream(), 
       Encoding.GetEncoding("ISO-8859-1")); 

qui en ferait.

Questions connexes