【问题标题】:Display unicode characters - Android显示 unicode 字符 - Android
【发布时间】: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。谢谢!

标签: java android json unicode


【解决方案1】:

您的 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);
}

【讨论】:

    猜你喜欢
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多