1

Google Maps API ジオコード サービスから XML 出力を読み取り、LINQ to XML を使用して文字列を解析する小さなプログラムを作成しました。

返された XML に非 ASCII 文字が含まれている場合、出力が壊れているようです。これを別の方法で読み取り/エンコードする方法はありますか?

コードの主要部分のスナップショットを次に示します。

    public static void Read(IList<string> LocationDetails, string Type)
    {
        using (WebClient webClient = new WebClient())
        {
            webClient.Proxy = null;

            for(int i = 0; i < 5; i++)
            {
                //Generate geocode request and read XML file to string
                string request = String.Format("Https://maps.google.com/maps/api/geocode/xml?{0}={1}&sensor=false", Type, LocationDetails[i]);
                string locationXML = webClient.DownloadString(request);
                XElement root = XElement.Parse(locationXML);

              //Check if request is OK or otherwise
              if (root.Element("status").Value != "OK")
              {     //Skip to next iteration if status not OK
                 continue;   
              }
            }

..... いくつかの宣言コードをスキップします。StateName が文字列として宣言されました。

    try
    {
        StateName = (result.Elements("address_component")
         .Where(x => (string)x.Element("type") == "administrative_area_level_1")
         .Select(x => x.Element("long_name").Value).First());
    }
    catch (InvalidOperationException e)
    {
        StateName = null;
    }
4

1 に答える 1

3

Google Web サービスは、UTF-8 を使用してエンコードされた XML を返すと思います。ただし、この情報が HTTP ヘッダーにない場合、WebClient.DownloadStringメソッドはEncoding.Default返されたバイトを文字列にデコードするために使用します。これは「ANSI」エンコーディングとも呼ばれ、ほとんどの場合 UTF-8 ではありません。

これを修正するには、 を呼び出す前に次の割り当てを実行する必要がありますwebclient.DownloadString(request)

webClient.Encoding = Encoding.UTF8;
于 2012-08-09T13:40:11.000 に答える