如何将Unicode值转换为字符?

问题描述 投票:0回答:2

我从服务器收到此值 (20B9) 作为货币,它是印度卢比 (£) 的对应符号。如何从 utf 值在文本视图中显示货币符号?

下面是我从服务器收到的 JSONObject。

"currency": {
    "name": "Indian rupee",
    "isoCode": "INR",
    "symbol": "20B9",
    "decimalDigits": 2
  }

我正在使用 belove 函数来格式化产品的成本

  public static String formatAmount(Currency currency, double amount) {
    String currencySymbol =  "\\u"+currency.getSymbol();
    DecimalFormat df = new DecimalFormat("#");
    df.setMaximumFractionDigits(0);
    byte[] utf8 = new byte[0];
    try {
        utf8 = currencySymbol.getBytes("UTF-8");
        currencySymbol = new String(utf8, "UTF-8");
        System.out.println(currencySymbol);
    } catch (UnsupportedEncodingException e) {
        currencySymbol = currency.getIsoCode();
    }
    return currencySymbol + df.format(amount);
}

但是我得到的是 \u20B9,因为输出不是 $

android utf-8
2个回答
3
投票

20B9
是 Unicode 点值。 IE。 U+20B9。它没有编码,也不是 UTF-8。

尝试

currencySymbol.getBytes("UTF-8")
是没有意义的,因为你的字符串已经从字节解码 - 你将得到的只是十六进制字符串的 ASCII 字节,因此你得到的响应。

相反,您需要:

  1. 将十六进制转换为整数,表示 Unicode 代码点
  2. 获取给定 Unicode 代码点的字符

示例:

 int codepoint = Integer.parseInt(currency.getSymbol(), 16);
 char[] currencySymbol =Character.toChars(codepoint);

0
投票
2024 年 12 月 14 日下午 3:57 - 消息和通话均经过端到端加密。在此聊天之外,没有人可以阅读或收听它们,甚至 WhatsApp 也无法阅读或收听。点击了解更多。

© www.soinside.com 2019 - 2024. All rights reserved.