1

我想显示来自 Google Map Server 的响应。我得到的响应是在将纬度和经度发送到谷歌地图服务器后得到的位置的名称,响应就像这样“av de la République”,但是当我在应用程序中显示这个之后解析响应,它显示为“av de la RÃ(c)publique”....

下面的代码片段可能有助于理解我的问题..

public static String getAddress(double lat, double lon){
        StringBuilder stringBuilder = new StringBuilder();
         String add ="";

       try {

        HttpPost httppost = new HttpPost("http://maps.googleapis.com/maps/api/geocode/json?latlng="+lat+","+lon+"&sensor=false");
        HttpClient client = new DefaultHttpClient();
        org.apache.http.HttpResponse response;
        stringBuilder = new StringBuilder();

            response = client.execute(httppost);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }

        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject = new JSONObject(stringBuilder.toString());
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

       try {
          add = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
               .getString("formatted_address");
       } catch (Exception e) {
           e.printStackTrace();
       }
       return add;
    }

这是我的代码实现

public static String getAddress(double lat, double lon){
        StringBuilder stringBuilder = new StringBuilder();
         String add ="";
        try {

        HttpPost httppost = new HttpPost("http://maps.googleapis.com/maps/api/geocode/json?latlng="+lat+","+lon+"&sensor=false");
        HttpClient client = new DefaultHttpClient();
        org.apache.http.HttpResponse response;
        stringBuilder = new StringBuilder();


            response = client.execute(httppost);
            HttpEntity entity = response.getEntity();

            char[] buffer = new char[2048];
            Reader reader = new InputStreamReader(entity.getContent(), "UTF-8");
            while (true) {
                int n = reader.read(buffer);
                if (n < 0) {
                    break;
                }
                stringBuilder.append(buffer, 0, n);
            }
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }

        JSONObject jsonObject = new JSONObject();
        try {
            Log.i("===================", stringBuilder.toString());
            jsonObject = new JSONObject(stringBuilder.toString());
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


       try {

          add = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
               .getString("formatted_address");

       } catch (Exception e) {
           e.printStackTrace();

       }

       return add;

    }
4

2 回答 2

2

您正在将文本读取为字节,而不是文本。这相当于读取 ISO-8859-1 中的响应,而实际上它是 UTF-8。

尝试这个:

char[] buffer = new char[2048];
Reader reader = new InputStreamReader(entity.getContent(), "UTF-8");
StringBuilder stringBuilder = new StringBuilder();

while (true) {
    int n = reader.read(buffer);
    if (n < 0) {
        break;
    }
    stringBuilder.append(buffer, 0, n);
}

在这里,它被集成到您的代码中:

public static String getAddress(double lat, double lon){
    StringBuilder stringBuilder = new StringBuilder();
    String add ="";

    try {

        HttpPost httppost = new HttpPost("http://maps.googleapis.com/maps/api/geocode/json?latlng="+lat+","+lon+"&sensor=false");
        HttpClient client = new DefaultHttpClient();
        org.apache.http.HttpResponse response;
        stringBuilder = new StringBuilder();
        response = client.execute(httppost);
        HttpEntity entity = response.getEntity();

        char[] buffer = new char[2048];
        Reader reader = new InputStreamReader(entity.getContent(), "UTF-8");
        while (true) {
            int n = reader.read(buffer);
            if (n < 0) {
                break;
            }
            stringBuilder.append(buffer, 0, n);
        }

    } catch (ClientProtocolException e) {

    } catch (IOException e) {

    }

    JSONObject jsonObject = new JSONObject();
    try {
        jsonObject = new JSONObject(stringBuilder.toString());
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {
        add = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
        .getString("formatted_address");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return add;
}
于 2012-12-18T16:55:26.120 回答
-1

这就是答案。https://stackoverflow.com/a/5730210

字节 ptext[] = myString.getBytes("ISO-8859-1"); 字符串值 = 新字符串(ptext,“UTF-8”);

如果您正在从文件中读取,您还需要使用 UTF-8 编码对 inputStreamReader 进行编码。

final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(input, "UTF-8"));

于 2013-05-24T14:47:57.357 回答