0

我需要从 URL 获取一个 json 文件,解析它并获取内容。此 Json 包含克罗地亚语字符和符号,例如“Pošaljite e-marlon”。我使用以下代码从 URL 获取 Json 文件。这是我使用的 URL http://ptracker.com/webteh/localization.php

InputStream is = null;
                try {

                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost(language_url);

                    HttpResponse httpResponse = httpClient.execute(httpPost);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    is = httpEntity.getContent();

                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                String json = null;
                try {
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(is, Charset.forName("ISO-8859-2")), 8);
                    StringBuilder sb = new StringBuilder();
                    String line = null;
                    while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                    }
                    is.close();
                    json = sb.toString();
                    Log.v("json >>", json);
                } catch (Exception e) {
                    Log.e("Buffer Error",
                            "Error converting result " + e.toString());
                }

响应 json 不显示原始字符串“Pošaljite e-marlon”。它给出“Poaljite e-mailom”。如何解决这个问题?

4

3 回答 3

2

我认为您的问题是您假设您的响应是使用 ISO-8859-2 编码的。尝试检查响应标头以查看是否可以获得编码描述,例如:

content-type:application/json; charset=UTF-8

更新:我使用了一个技巧来获取字符集:我打开 Firebug 并在document.characterSet返回的控制台中运行"windows-1252"。然后我做了这个小例子,它奏效了。我不确定Android是否支持这个字符集,但是......

public static void main(String[] args) throws IOException {
        URL url= new URL("http://ptracker.com/webteh/localization.php");
        URLConnection con = url.openConnection();
        System.out.println(con.getContentType());
        BufferedReader br= new BufferedReader(new InputStreamReader( 
                  con.getInputStream(),Charset.forName("windows-1252")));
        String s=null;
        while ((s=br.readLine())!=null) {
            System.out.println(s);
        }
    }
于 2013-07-10T15:59:29.693 回答
0

尝试使用 Charset UTF-8,因为ISO_8859-2不支持西班牙符号。

于 2013-07-10T15:44:34.117 回答
0

Biagio 是对的,你需要 UTF-8。我尝试了您的代码(使用克罗地亚语字符),并且通过此修改可以正常工作:

BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")), 8);
于 2013-07-10T16:02:14.643 回答