我正在使用这段代码从网址抓取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文件而另一个不是吗?
答案 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进行解码。