【发布时间】:2014-05-26 12:57:14
【问题描述】:
我有一个用于货币的 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 正在转义反斜杠。试试
"\u20ac"而不是"\\u20ac" -
(你也在以一种可怕的方式阅读 JSON。你应该几乎永远使用
available()。使用InputStreamReader,最好使用一个帮助库可以将任何Reader的内容读入字符串。例如Guava。) -
@Jon Skeet 谢谢就是这样,您能否发布一个简短的答案,以便我可以接受并给予您信任。至于 InputStreamReader,我找不到从资产中读取文件的更好方法,我会看看 guava。谢谢!