Android - 在没有 StringEscapeUtils 的情况下解码 unicode 字符?
Android - decode unicode characters without StringEscapeUtils?
当我使用 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 转义序列中的反斜杠进行了两次转义。感谢大家的帮助!
只有我一个人,还是真的比简单地使用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());
您可以将其解析为十六进制数
char c = (char)Integer.parseInt(str.substring(2), 16);
Gson returns "$"
。您的设置有问题。
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());
当我使用 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 转义序列中的反斜杠进行了两次转义。感谢大家的帮助!
只有我一个人,还是真的比简单地使用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());
您可以将其解析为十六进制数
char c = (char)Integer.parseInt(str.substring(2), 16);
Gson returns "$"
。您的设置有问题。
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());