служба WebClient.DownloadString приводит к искаженным символам из-за проблем с кодировкой, но браузер в порядке
следующий код:
var text = (new WebClient()).DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20"));
приводит к переменной text
который содержит, среди прочего, строку
"$κ $ -пространство Минковского, скалярное поле и проблема лоренцевой инвариантности"
однако, когда я посещаю этот URL в Firefox, я получаю
$κ$-пространство Минковского, скалярное поле и проблема лоренцевой инвариантности
что на самом деле правильно. Я тоже пробовал
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);
но это дало ту же проблему.
Я не уверен, где здесь лежит вина. Является ли канал лжет о том, что он закодирован UTF8, и браузер достаточно умен, чтобы понять это, но не WebClient
? Правильно ли закодирован канал UTF8, но WebClient
терпит неудачу каким-то другим способом? Что я могу сделать, чтобы смягчить это?
1 ответ:
это не ложь. Вы должны установить кодировку webclient сначала перед вызовом 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"); }
Что касается того, почему ваша альтернатива не работает, это потому, что использование неверно. Его должно быть:
System.Text.Encoding.UTF8.GetString()