2010-09-29 3 views
4

Je suis en train de transférer un l'application .NET de Windows à Mono, mais certain code qui fonctionnait sous Windows ne fonctionne plus (comme prévu) sur mono:Mono WebClient encodage question

WebClient client = new WebClient(); 
Console.WriteLine (client.DownloadString("http://www.maxima.fm/51Chart/")); 

il semble détecter correctement le codage comme UTF-8 (et le réglage manuel de l'encodage en UTF-8 ou ASCII ne fonctionne pas non plus) il y a toujours '?' caractères

Répondre

2

Vous écrivez à la console. Peut-être que votre console n'est pas configurée correctement pour afficher certains caractères. Assurez-vous de déboguer et de stocker le résultat dans une variable intermédiaire.

Aussi le site que vous avez donné comme exemple est complètement foiré. Le serveur web envoie l'en-tête HTTP Content-Type: text/html; charset=iso-8859-1 et dans le HTML obtenu vous voyez <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> qui bien sûr est complètement incohérent. Vous ne pouvez pas vous attendre à ce qu'un client HTTP se comporte correctement lorsqu'il est confronté à un site non standard, ce que vous obtenez est un comportement inattendu. Essayez les tests sur un site Web qui respecte un minimum de normes Web. Remarque: WebClient implémente IDisposable, alors assurez-vous de l'inclure dans une instruction using.


MISE À JOUR:

Pour le faire fonctionner avec ce site particulier, vous pouvez essayer de télécharger la réponse manuellement et en spécifiant le codage correct :

// You may try different encodings here (for me it worked with iso-8859-1) 
var encoding = Encoding.GetEncoding("iso-8859-1"); 
using (var client = new WebClient()) 
{ 
    using (var stream = client.OpenRead("http://www.maxima.fm/51Chart/")) 
    using (var reader = new StreamReader(stream, encoding)) 
    { 
     var result = reader.ReadToEnd(); 
     Console.WriteLine(result); 
    } 
} 
+0

Merci pour la recommandation 'using', cependant j'ai besoin de mon code pour travailler sur ce site spécifique (il n'y a pas de problème d'encodage de la console, j'ai vérifié) et même si le site est foiré il sh ows parfaitement sur tous mes navigateurs sur toutes les plateformes, s'il vous plaît j'ai besoin d'une solution;) – Luffy

+0

@Luffy, s'il vous plaît voir ma mise à jour. –

+0

cela fonctionne parfaitement merci beaucoup: D – Luffy

0
using (var client = new WebClient()) 
     { 
      client.Encoding = Encoding.UTF8; 
      Console.WriteLine (client.DownloadString("http://www.maxima.fm/51Chart/")); 
     }