Java 如何处理来自谷歌地图服务器的重音字符(如Ré;publique中的é;在Android中作为响应)

Java 如何处理来自谷歌地图服务器的重音字符(如Ré;publique中的é;在Android中作为响应),java,android,utf-8,Java,Android,Utf 8,我想显示来自谷歌地图服务器的响应。我得到的响应是我在将纬度和经度发送到Google地图服务器后得到的位置名称,响应是这样的“av de la République”,但当我在解析响应后在应用程序中显示它时,它显示为“av de la RÃ(c)publique” 下面的代码片段可能有助于理解我的问题 public static String getAddress(double lat, double lon){ StringBuilder stringBuilder = new

我想显示来自谷歌地图服务器的响应。我得到的响应是我在将纬度和经度发送到Google地图服务器后得到的位置名称,响应是这样的“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;

    }
公共静态字符串getAddress(双lat,双lon){
StringBuilder StringBuilder=新的StringBuilder();
字符串add=“”;
试一试{
HttpPost HttpPost=新的HttpPost(“http://maps.googleapis.com/maps/api/geocode/json?latlng=“+lat+”、“+lon+”&传感器=假”);
HttpClient=new DefaultHttpClient();
org.apache.http.HttpResponse响应;
stringBuilder=新的stringBuilder();
响应=client.execute(httppost);
HttpEntity=response.getEntity();
char[]buffer=新字符[2048];
Reader Reader=新的InputStreamReader(entity.getContent(),“UTF-8”);
while(true){
int n=读卡器读取(缓冲区);
if(n<0){
打破
}
追加(缓冲区,0,n);
}
}捕获(客户端协议例外e){
}捕获(IOE异常){
}
JSONObject JSONObject=新的JSONObject();
试一试{
Log.i(“======================”,stringBuilder.toString());
jsonObject=新的jsonObject(stringBuilder.toString());
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
add=((JSONArray)jsonObject.get(“结果”)。getJSONObject(0)
.getString(“格式化的_地址”);
}捕获(例外e){
e、 printStackTrace();
}
返回添加;
}

您正在以字节而不是文本的形式读取文本。多少钱 阅读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);
}
char[]buffer=新字符[2048];
Reader Reader=新的InputStreamReader(entity.getContent(),“UTF-8”);
StringBuilder StringBuilder=新的StringBuilder();
while(true){
int n=读卡器读取(缓冲区);
if(n<0){
打破
}
追加(缓冲区,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;
}
公共静态字符串getAddress(双lat,双lon){
StringBuilder StringBuilder=新的StringBuilder();
字符串add=“”;
试一试{
HttpPost HttpPost=新的HttpPost(“http://maps.googleapis.com/maps/api/geocode/json?latlng=“+lat+”、“+lon+”&传感器=假”);
HttpClient=new DefaultHttpClient();
org.apache.http.HttpResponse响应;
stringBuilder=新的stringBuilder();
响应=client.execute(httppost);
HttpEntity=response.getEntity();
char[]buffer=新字符[2048];
Reader Reader=新的InputStreamReader(entity.getContent(),“UTF-8”);
while(true){
int n=读卡器读取(缓冲区);
if(n<0){
打破
}
追加(缓冲区,0,n);
}
}捕获(客户端协议例外e){
}捕获(IOE异常){
}
JSONObject JSONObject=新的JSONObject();
试一试{
jsonObject=新的jsonObject(stringBuilder.toString());
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
add=((JSONArray)jsonObject.get(“结果”)。getJSONObject(0)
.getString(“格式化的_地址”);
}捕获(例外e){
e、 printStackTrace();
}
返回添加;
}

您正在以字节而不是文本的形式读取文本。多少钱 阅读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);
}
char[]buffer=新字符[2048];
Reader Reader=新的InputStreamReader(entity.getContent(),“UTF-8”);
StringBuilder StringBuilder=新的StringBuilder();
while(true){
int n=读卡器读取(缓冲区);
if(n<0){
打破
}
追加(缓冲区,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;
}
公共静态字符串getAddress(双lat,双lon){
StringBuilder StringBuilder=新的StringBuilder();
字符串add=“”;
试一试{
HttpPost HttpPost=新的HttpPost(“http://maps.googleapis.com/maps/api/geocode/json?latlng=“+lat+”、“+lon+”&传感器=假”);
HttpClient=new DefaultHttpClient();
org.apache.http.HttpResponse响应;
stringBuilder=新的stringBuilder();
响应=client.execute(httppost);
HttpEntity=response.getEntity();
char[]buffer=新字符[2048];
Reader Reader=新的InputStreamReader(entity.getContent(),“UTF-8”);
while(true){
int n=读卡器读取(缓冲区);
if(n<0){
打破
}
追加(缓冲区,0,n);
}
}捕获(客户端协议例外e){
}捕获(IOE异常){
}
JSONObject JSONObject=新的JSONObject();
试一试{
jsonObject=新的jsonObject(stringBuilder.toString());
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
add=((JSONArray)jsonObject.get(“结果”)。getJSONObject(0)
.getString(“格式化的_地址”);
}捕获(例外e){
e、 printStackTrace();
}
返回添加;
}
这就是答案

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

如果您正在读取文件,则