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);
этот будет работать для любого персонажа