将HttpEntity解码为Android字符串 - 编码问题

4

我知道这应该是基础知识,但我没有相关的培训 :( ,我不理解它,似乎对其他人来说很明显。我知道一方使用自己的编码方式对数据进行编码,而Android可能期望另一种编码方式,但我该怎么翻译呢?

我的应用程序通过Google Maps API执行GET请求以从Lat / lng检索地址。但我无法正确解码结果,因为一个法语的è显示为è

我在Java方面没有足够的经验来理解该怎么做。这与UTF-8有关,对吗?

我该怎么办?

            response = client.execute(httpGet);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
            JSONObject jsonObject = new JSONObject();
            jsonObject = new JSONObject(stringBuilder.toString());
            retList = new ArrayList<Address>();
            if("OK".equalsIgnoreCase(jsonObject.getString("status"))){
                JSONArray results = jsonObject.getJSONArray("results");
                for (int i=0;i<results.length();i++ ) {
                    JSONObject result = results.getJSONObject(i);
                    String indiStr = result.getString("formatted_address");
                    Address addr = new Address(Locale.ITALY);
                    addr.setAddressLine(0, indiStr);
                    Dbg.d(TAG, "adresse :"+addr.toString());
                    retList.add(addr);
                }
            }

感谢您的帮助!
2个回答

10

尝试使用UTF-8,

而不是使用 InputStream,可以尝试使用以下方法,

String responseBody = EntityUtils.toString(response.getEntity(), HTTP.UTF_8);

1
它有效了!谢谢。 当您指定UTF_8时,您是在说第一个参数是UTF-8还是您想要一个UTF-8编码的结果? - Poutrathor
1
总有50种方法可以达到目标,最简单的方法是你发现的最后一种。 大多数示例使用流读取结构,但这种方式更好用,如果您只希望将其存储为字符串,则可能同样有效。 - John
如果您不使用缓冲区且实体太大,这很简单但最终会导致 OutofMemoryError。http://stackoverflow.com/questions/7795591/android-httpentityutils-outofmemoryexception - Kerem
@mass 很明显当你需要改变事物时,你需要去做。 - Lalit Poptani

0

你可以使用BufferedReader
你的代码将会是这样的:

InputStream stream = entity.getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
        int b;
        while ((b = br.read()) != -1) {
            stringBuilder.append(b);
        }

这个新方案比之前的解决方案更有效吗?我也会尝试一下看看它是否可行。 - Poutrathor
没有接受InputStream的BufferedReader构造函数。 - Poutrathor
这个非常简单的代码只有一行:String responseBody = EntityUtils.toString(response.getEntity(), HTTP.UTF_8); - Venky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接