El siguiente código:
var text = (new WebClient()).DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20"));
da como resultado una variable text
que contiene, entre muchas otras cosas, la cadena
"$ κ $ -Minkowski espacio, campo escalar y el problema de la invariancia de Lorentz"
Sin embargo, cuando visito esa URL en Firefox, obtengo
$ κ $ -Espacio de Minkowski, campo escalar y el problema de la invariancia de Lorentz
que es realmente correcto. También lo intenté
var data = (new WebClient()).DownloadData("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20");
var text = System.Text.UTF8Encoding.Default.GetString(data);
pero esto dio el mismo problema.
No estoy seguro de dónde está la culpa. ¿El feed miente acerca de estar codificado en UTF8 y el navegador es lo suficientemente inteligente como para darse cuenta de eso, pero no WebClient
? ¿El feed está codificado correctamente en UTF8, pero WebClient
falla de alguna otra manera? ¿Qué puedo hacer para mitigar esto?
UTF8Encoding.Default
es en realidadEncoding.Default
, que es la codificación ANSI basada en la configuración de idioma del sistema operativo.Respuestas:
No es mentira. Primero debe configurar la codificación del cliente web antes de llamar a DownloadString.
using(WebClient webClient = new WebClient()) { webClient.Encoding = Encoding.UTF8; string s = webClient.DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20"); }
En cuanto a por qué su alternativa no funciona, es porque el uso es incorrecto. Debe ser:
System.Text.Encoding.UTF8.GetString()
fuente
WebClient
no use los encabezados para detectar esto, pero esto funciona perfectamente, y entre usted y @svick, entiendo por qué la otra cosa que intenté también falló miserablemente.UploadString
así