62 votes

WebClient.DownloadString() retourne une chaîne avec des caractères particuliers

J'ai un problème avec certains contenus que nous sommes en téléchargement à partir du web pour une capture d'écran de l'outil que je suis bâtiment.

dans le code ci-dessous, la chaîne renvoyée par le client web de téléchargement de la chaîne de méthode renvoie de drôles de personnages pour la source de téléchargement pour quelques-uns (pas tous) des sites web.

J'ai récemment ajouté des en-têtes http en tant que ci-dessous. Auparavant, le même code a été appelé sans les en-têtes pour le même effet. Je n'ai pas essayé les variations sur "Accept-Charset' en-tête, je ne sais pas beaucoup au sujet de l'encodage des textes autres que les bases.

Les personnages, ou les séquences de caractères auxquels je fais allusion sont:

""

et

"Â"

Ces caractères ne sont pas visibles lorsque vous utilisez "afficher la source" dans un navigateur web. Ce pourrait être la cause et comment puis-je résoudre le problème?

string urlData = String.Empty;
WebClient wc = new WebClient();

// Add headers to impersonate a web browser. Some web sites 
// will not respond correctly without these headers
wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12");
wc.Headers.Add("Accept", "*/*");
wc.Headers.Add("Accept-Language", "en-gb,en;q=0.5");
wc.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");

urlData = wc.DownloadString(uri);

99voto

dkarp Points 6864

 est le windows-1252 représentation des octets EF BB BF. C'est de l'UTF-8 octets de commande de marqueur, ce qui implique que votre page web distante est encodé en UTF-8, mais vous êtes en train de lire comme si c'était windows-1252. Selon les docs, WebClient.DownloadString utilise Webclient.Encoding comme son encodage lorsqu'il convertit la ressource distante dans une chaîne. Mis à System.Text.Encoding.UTF8 et les choses devraient fonctionner en théorie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X