使用JAVA从URL解码JSON

时间:2016-07-01 18:03:45

标签: java json encoding

我正在使用这段代码从网址抓取json并使用UTF8解码输入流

    try {
        InputStream is;
            is = new URL(url).openStream();
      BufferedReader rd = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
      StringBuilder sb = new StringBuilder();
      int cp;
      while ((cp = rd.read()) != -1) {
        sb.append((char) cp);
        System.out.println(cp + "  " + ((char) cp));
      }
      JSONArray json = new JSONArray(sb.toString());
      return json;
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
    }

当我在网站http://www.somewebsite.com/data.json上运行时 我得到了一堆乱七八糟的

以下是我回来的前两个字符(3和65533)

31
65533 \ ufffd

我理解65533是替换字符,所以我在编码方面做错了。

我尝试将此相同的json文本上传到其他网站

http://ex。 www.someotherwebsite.com/abcd 它解码很好。

我尝试下载这两个文件,它们都是UTF8。 是因为一个是.json文件而另一个不是吗?

3 个答案:

答案 0 :(得分:0)

尝试此方法Charset.forName("UTF-8").encode(your-data-in-string)。或者,如果此String位于servlet中并且您希望将其作为响应发送,请将setCharacterEncoding(“UTF-8”)与response对象一起使用。

答案 1 :(得分:0)

你刚刚转换了charset。如果要从URL获取数据,则应在解析JSON字符串之前检查参数是否已对其进行url编码和解码。

答案 2 :(得分:0)

如果有人想知道,json文件不是utf-8。 当我用gzip编码时,我试图使用utf-8进行解码。