如何将Unicode值转换为字符?

时间:2017-01-24 16:48:52

标签: android utf-8

我从服务器收到此值(20B9)作为货币,这是印度卢比(₹)的相应符号。如何在utf值中显示textview中的货币符号。?

以下是我从服务器收到的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作为输出而不是₹

1 个答案:

答案 0 :(得分:3)

20B9是Unicode点值。即U + 20B9。它不是编码而不是UTF-8。

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

相反,您需要:

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

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