Android 如何将Unicode值转换为字符?
我从服务器上收到这个值(20B9)作为货币,它是印度卢比的对应符号(₹). 如何从utf值在文本视图中显示货币符号 下面是我从服务器收到的JSONObjectAndroid 如何将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(
"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字节,因此您将得到响应
相反,您需要:
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,一个好的解码器应该对其进行解码,否则请参阅请提供一些代码,以便我们能够帮助您更新代码。请查看它