DownloadString и специальные символы

Я пытаюсь найти индекс Маурисио в строке, которая загружается с веб-сайта с помощью веб-клиента и строки загрузки. Тем не менее, на сайте он содержит иностранный символ, Маурисио. Так что я нашел в другом месте некоторый код

string ToASCII(string s)
{
return String.Join("",
     s.Normalize(NormalizationForm.FormD)
    .Where(c => char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark));
}

который преобразует иностранные символы. Я проверил код, и он работает. У меня проблема в том, что когда я загружаю строку, она загружается как MaurA-cio. Я пробовал оба

wc.Encoding = System.Text.Encoding.UTF8; wc.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");

Также не мешайте скачивать как MaurA-cio.

(Кроме того, я не могу изменить поиск, так как получаю поисковый запрос из списка).

Что еще я могу попробовать? Спасибо

2 ответа

Решение

DownloadString не смотрит на заголовки HTTP-ответа. Он использует ранее установленное свойство WebClient.Encoding. Если вам нужно его использовать, сначала получите заголовки:

// call twice 
// (or to just do a HEAD, see http://stackru.com/questions/3268926/head-with-webclient)
webClient.DownloadString("http://en.wikipedia.org/wiki/Maurício");
var contentType = webClient.ResponseHeaders["Content-Type"];
var charset = Regex.Match(contentType,"charset=([^;]+)").Groups[1].Value;

webClient.Encoding = Encoding.GetEncoding(charset);
var s = webClient.DownloadString("http://en.wikipedia.org/wiki/Maurício");

Кстати -Unicode не определяет "чужие" символы. С точки зрения Маурисио, "Маурисио" будет иностранным написанием его имени.

var client = new WebClient { Encoding = System.Text.Encoding.UTF8 };

var json = client.DownloadString(url);

этот будет работать для любого персонажа

Другие вопросы по тегам