Следующий код:
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
не работает ли какой-то другой способ? Что я могу сделать, чтобы это смягчить?
UTF8Encoding.Default
ФактическиEncoding.Default
, это кодировка ANSI, основанная на языковых настройках ОС.Ответы:
Это не ложь. Вы должны сначала установить кодировку веб-клиента, прежде чем вызывать 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()
источник
WebClient
не используются заголовки для обнаружения этого, но это работает отлично, и между вами и @svick я понимаю, почему другая вещь, которую я пробовал, также терпит неудачу.UploadString
а