显示unicode字符-Android



我有一个货币的json:

[
  {
    "acronym": "EUR",
    "currency": "Euros",
    "favorite": "true",
    "placeholder": "\u20ac00.00 EUR",
    "symbol": "\u20ac"
  }
]

我把它放在资产文件夹中,然后像这样解析:

InputStream stream = context.getAssets().open("currencies.json");
int size = stream.available();
byte[] buffer = new byte[size];
stream.read(buffer);
stream.close();
str = new String(buffer, "UTF-8");

然后我用GSON 将其转换为我的pojo对象

Type objectType = new TypeToken<ArrayList<Currency>>(){}.getType();
ArrayList<Currency> currencies = gson.fromJson(json, objectType);
return currencies;

这很好(我的pojo属性的名称与json中的相同)。

无论如何

例如,当我尝试显示符号时,它并没有按应有的方式显示我得到的是"\u20ac"而不是"€"

txtAmount.setText(currency.getSymbol());

我已经尝试了以下日志

Log.d(currency.getSymbol() + "u20ac");

这给了我:

u20ac€

我不明白为什么它不能正确显示字符。。

您的JSON已转义反斜杠,这意味着它是"反斜杠u 20ac"的JSON表示。

您所需要做的就是而不是转义反斜杠,这样u20ac就是欧元符号的JSON转义版本:

"symbol": "u20ac"

我还建议使用Guava加载您的字符串,并使用try-with-resources语句:

String json;
try (Reader reader = 
         new InputStreamReader(context.getAssets().open("currencies.json"),
                               Charsets.UTF_8)) {
    json = CharStreams.toString(reader);
}

最新更新