получить utf-8 геокод Google Map API Адрес улицы в asp

Я новичок в asp.net (С#). Но мне нужно получить адрес utf-8 из положения широты и долготы. Поэтому мне нужно получить адрес на языке fa, и мы добавили language= fa в адрес карты String. но он извлек странный символ, это мой код:

public static void RetrieveFormatedAddress(string lat1, string lng1)
{
    static string baseUri = "http://maps.googleapis.com/maps/api/geocode/xml?latlng={0},{1}&language=fa&sensor=true";
    string requestUri = string.Format(baseUri, lat1, lng1);

    using (WebClient wc = new WebClient())
    {
        wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
        wc.DownloadStringAsync(new Uri(requestUri));
    }
}

static void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    var xmlElm = XElement.Parse(e.Result);
    var status = (from elm in xmlElm.Descendants()
                  where elm.Name == "status"
                  select elm).FirstOrDefault();
    if (status.Value.ToLower() == "ok")
    {
        var res = (from elm in xmlElm.Descendants()
                   where elm.Name == "formatted_address"
                   select elm).FirstOrDefault();
        Console.WriteLine(res.Value);
        Console.WriteLine(res);
        GetSMS getsms1 = new GetSMS();
        getsms1.retrunAdress(res.Value);
    }
    else
    {
        Console.WriteLine("error");
    }
}

И гугл мне вернул:

    طھظ‡ط±ط§ظ†طŒ طھظ‡ط±ط§ظ†طŒ ط®غŒط§ط¨ط§ظ† ط§ظ…غŒط±غŒ ط·ط§ط¦ظ…ظ‡طŒ ط§غŒط±ط§ظ†

Как я могу получить языковой адрес «фарси» от Google? Спасибо


person aliblk1    schedule 27.12.2015    source источник
comment
какая (т.е. какая переменная) именно строка, которую вы указали в качестве результата? Вы смотрели на результат запроса в браузере, чтобы увидеть, есть ли у него какое-либо сходство с содержимым строки? вы запросили язык на фарси (язык = фа) - это было вашим намерением? Результат, кажется, содержит некоторые символы, похожие на фарси, поэтому он не обязательно полностью неверен. Попробуйте посмотреть, что произойдет, если вы будете использовать английский язык, а затем, если необходимо, переключитесь обратно на фарси.   -  person Remigius Stalder    schedule 27.12.2015
comment
@RemigiusStalder Во-первых, спасибо за ваш комментарий. и да, мне нужен уличный язык фарси. когда я использовал language=en, я получил адрес на английском языке, как показано ниже: Тегеран, Тегеран, улица Амири Тэме, Иран.   -  person aliblk1    schedule 27.12.2015
comment
прошу ответить на все мои вопросы...   -  person Remigius Stalder    schedule 27.12.2015
comment
Что вы имеете в виду под i.e.? (вы имеете в виду мой браузер)? И используйте запрос строки в браузере, и результат будет правильным языком fa.   -  person aliblk1    schedule 27.12.2015
comment
Результат в браузере показывает вам, что возвращает Google. Я не могу ничего проверить, так как вы не предоставляете координаты своего тестового примера. Какая из переменных содержит указанный вами результат? Соответствует ли он предполагаемой части возвращенного XML? Если это так (а также ваш код правильно работает на английском языке), вы можете только отправить отчет об ошибке в Google (не спрашивайте меня, как заставить Google исправить это). В противном случае вы должны запросить возвращенный XML другим способом, чтобы получить именно ту его часть, которая вам нужна.   -  person Remigius Stalder    schedule 27.12.2015
comment
Кажется, будет какая-то ошибка в var xmlElm = XElement.Parse(e.Result); потому что, когда я использую адрес строки Google в браузере, я возвращаю правильные символы языка fa. но после этой строки символы меняются на другой юникод   -  person aliblk1    schedule 27.12.2015
comment
@RemigiusStalder знаете ли вы другой способ сделать это? как json   -  person aliblk1    schedule 27.12.2015
comment
именно об этом я и думаю. Мне кажется, что содержимое e.Result является правильным ответом в правильном XML (то есть таким же, как то, что вы видите в браузере). Вам необходимо извлечь содержимое первого вхождения GeocodeResponse/result/formatted_address. Я думаю, что используемый вами Linq API выходит за рамки (он предоставляет SQL-подобный интерфейс для XML-документов). Прямой подход состоял бы в том, чтобы прочитать строку в XmlDocument, как здесь: stackoverflow.com/questions/4929653/, затем перейдите по XPath, упомянутому выше.   -  person Remigius Stalder    schedule 27.12.2015


Ответы (1)


После 2 дней поиска в сети и тестирования множества разных кодов, наконец, я нашел решение. Мои коды верны, но нужно только установить Unicode UTF-8 на объекте веб-клиента. Итак, мой код изменится на это:

  using (WebClient wc = new WebClient())
    {
       wc.Encoding = Encoding.UTF8;
       wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
       wc.DownloadStringAsync(new Uri(requestUri));
    }

это будет работать и в UTF-8.

person aliblk1    schedule 27.12.2015