我有一个网址的json响应,如下面的
{
"data": [
{
"fav": "",
"name": "u0637u0627u062cu0646 u0627u0644u062fu062cu0627u062c u0627u0644u0633u0648u064au0633u0631u064a u0627u0644u062bu0627u0646u064a",
"imageurl": "http://images.media.com/userphotos/250x250/26847.jpg",
"description": "u0633u062eu0646 u0627u0644u0641u0631u0646 <BR> u0625u0644u0649 350 u062fu0631u062cu0629 u0641u0647u0631u0646u0647u0627u064au062a (175 u062fu0631u062cu0629 u0645u0626u0648u064au0629) . <BR> u062au0631u062au064au0628 u0627u0644u062fu062cu0627u062c u0641u064a u0645u062fu0647u0648u0646 12 u00d7 8 u00d7 2 u0635u062du0646 u0627u0644u062eu0628u0632 . ",
"details": "<BR> 6 u062cu0644u062f u060c u0627u0644u062bu062fu064a u0627u0644u062fu062cu0627u062c u0627u0644u062eu0627u0644u064au0629 u0645u0646 u0627u0644u0639u0638u0645 <BR> 6 u0634u0631u0627u0626u062d u0627u0644u062cu0628u0646 u0627u0644u0633u0648u064au0633u0631u064a <BR> 1 ( 10.75 u0623u0648u0646u0635u0629 ) u064au0645u0643u0646 u0643u0631u064au0645 u0645u0643u062bu0641 u0645u0646 u062du0633u0627u0621 u0627u0644u062fu062cu0627u062c <BR> 1/4 u0643u0648u0628 u062du0644u064au0628 u0627u0644u0635u0641u062du0629 2 u0643u0648u0628 u0645u0632u064au062c u062du0634u0648 - u0645u062du0646u0643 u0639u0634u0628u0629 <u0631 ",
"tduration": "1 HR"
}
]
}
在此名称,描述和详细信息字段中包含一些语言翻译内容。 我需要在我的Android应用程序中将其编码为UTF-8。 我使用了下面的代码,但这似乎不起作用。
reader = new BufferedReader(new InputStreamReader(stream,"UTF-8"));
有人对此有所了解吗?
注意:代码工作正常,但字符未编码。
答案 0 :(得分:0)
您需要从输入流创建一个json对象。
StringBuilder jsonResults = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null) {
jsonResults.append(line);
}
rd.close();
JSONObject jsonObj = new JSONObject(jsonResults.toString());
boolean result = jsonObj.getBoolean("someDummyKey");
在gitub上还有一个很棒的库https://github.com/loopj/android-async-http,它会为你做所有的魔术。看看吧。
答案 1 :(得分:0)
首先,您的文字应包含\u0637\u0627\u062c\u0646
等序列(请注意\
)。
此表示法称为 Unicode转义语法。见http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html
在字符串文字中使用时,例如String a = "\u0060";
,这由编译器解释,字符串a
只包含1个字符。
在JSON字符串中使用时,它由JSON解析器解码。在您的情况下,一旦正确修复了转义序列,您就可以执行以下操作:
StringBuffer sb = new StringBuffer();
String line = null;
while ((line = reader.readLine() != null) {
sb.append(line).append(System.getProperty("line.separator"));
}
JSONObject object = new JSONObject(sb.toString());
即使您无法修复转义序列(例如,如果服务器端存在错误,您无法修复),您可能会考虑执行以下操作: / p>
JSONObject object = new JSONObject(sb.toString().replace("u06", "\\u06"));
由于所有有问题的序列似乎都在06 unicode平面(这是有意义的,它是阿拉伯字符所在的位置:http://en.wikibooks.org/wiki/Unicode/Character_reference/0000-0FFF)