WebClient.DownloadString, kodlama sorunları nedeniyle karıştırılmış karakterlere neden oluyor, ancak tarayıcıda sorun yok


86

Aşağıdaki kod:

var text = (new WebClient()).DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20"));

textdiğer birçok şeyin yanı sıra, dizeyi içeren bir değişkenle sonuçlanır

"$ κ $ -Minkowski uzayı, skaler alan ve Lorentz değişmezliği sorunu"

Ancak, Firefox’ta bu URL’yi ziyaret ettiğimde

$ κ $ -Minkowski uzayı, skaler alan ve Lorentz değişmezliği sorunu

bu aslında doğru. Ben de denedim

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

ama bu aynı sorunu verdi.

Arızanın burada nerede olduğundan emin değilim. Feed UTF8 kodlu olduğu konusunda yalan mı söylüyor ve tarayıcı bunu anlayacak kadar akıllı, ama değil WebClientmi? Besleme doğru şekilde UTF8 kodlu mu, ancak WebClientbaşka bir şekilde hata veriyor mu? Bunu azaltmak için ne yapabilirim?


6
UTF8Encoding.Defaultaslında Encoding.Default, işletim sistemi dil ayarlarına göre ANSI kodlamasıdır.
svick

Yanıtlar:


205

Yalan değil. DownloadString'i çağırmadan önce web istemcisinin kodlamasını ayarlamalısınız.

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

Alternatifinizin neden işe yaramadığına gelince, bunun nedeni kullanımın yanlış olmasıdır. Olması gereken:

System.Text.Encoding.UTF8.GetString()

9
Mükemmel teşekkür ederim! Bunu WebClienttespit etmek için başlıkları kullanmaması garip , ancak bu mükemmel çalışıyor ve siz ve @svick arasında, denediğim diğer şeyin neden sefil bir şekilde başarısız olduğunu anlıyorum.
Domenic

1
Bunun için UploadStringde çalışıyor
irfandar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.