Android 如何将Unicode值转换为字符?

Android 如何将Unicode值转换为字符?,android,utf-8,Android,Utf 8,我从服务器上收到这个值(20B9)作为货币,它是印度卢比的对应符号(₹). 如何从utf值在文本视图中显示货币符号 下面是我从服务器收到的JSONObject "currency": { "name": "Indian rupee", "isoCode": "INR", "symbol": "20B9", "decimalDigits": 2 } 我使用belove函数来设置产品的成本 public static String formatAmount(

我从服务器上收到这个值(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作为输出,而不是₹

20B9
是一个Unicode点值,即U+20B9。它不是编码的,也不是UTF-8

尝试
currencySymbol.getBytes(“UTF-8”)
是毫无意义的,因为您的字符串已经从字节中解码了-您将得到的只是十六进制字符串的ASCII字节,因此您将得到响应

相反,您需要:

  • 将十六进制转换为整数,表示Unicode代码点
  • 在给定的Unicode代码点获取字符
  • 例如:

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

    那么,您现在看到了什么?请显示完整文本。20B9对我来说不像utf-8值,因为20是空格char。20B9是Unicode点值。即U+20B9。使用JSON时,服务器使用
    \U
    前缀将非ASCII点值转义为Unicode点值是有效的。如果您使用JSON,一个好的解码器应该对其进行解码,否则请参阅请提供一些代码,以便我们能够帮助您更新代码。请查看它