Android - 解码没有StringEscapeUtils的unicode字符?

时间:2015-02-11 04:25:07

标签: java android unicode gson

当我使用Gson(JsonParser.parse)解码以下内容时:

{ "item": "Bread", "cost": {"currency": "\u0024", "amount": "3"}, "description": "This is bread\u2122. \u00A92015" }

“currency”元素作为字符串返回(并且不会转换为unicode字符)。 Gson中有设置或方法可以帮助我吗?

如果没有,Android中是否有任何方法可以将包含一个或多个转义字符序列(如“\ u0024”)的字符串转换为带有unicode字符的输出字符串(不编写我自己的字符串而不使用Apache的StringEscapeUtils) ?

我想避免添加另一个库(只有一个小功能)。

更新

看起来服务器在unicode转义序列中双重转义反斜杠。谢谢大家的帮助!

3 个答案:

答案 0 :(得分:2)

仅仅是我还是仅仅使用TextView setText()方法更复杂?无论如何,以下是使用给定的示例json(将示例放到资源并使用loadJSONFromAsset()读取),我的工作正常。

JsonParser parser = new JsonParser();
JsonElement element = parser.parse(loadJSONFromAsset());
JsonObject obj = element.getAsJsonObject();
JsonObject cost = obj.getAsJsonObject("cost");
JsonPrimitive sign = cost.get("currency").getAsJsonPrimitive();

TextView tv = (TextView)findViewById(R.id.dollar_sign);
tv.setText(sign.getAsString());

答案 1 :(得分:1)

Gson返回"$"。您的设置出了问题。

String s = "{ \"item\": \"Bread\", \"cost\": {\"currency\": " 
    + "\"\\u0024\", \"amount\": \"3\"}, \"description\": " 
    + "\"This is bread\\u2122. \\u00A92015\" }\n";
JsonElement v = new JsonParser().parse(s);
assertEquals("$", v.getAsJsonObject().get("cost").getAsJsonObject()
    .get("currency").getAsString());

答案 2 :(得分:0)

您可以将其解析为十六进制数

    char c = (char)Integer.parseInt(str.substring(2), 16);