Преобразуйте Unicode в его настоящий китайский символ в java - PullRequest
1 голос
/ 05 мая 2020

Я хочу преобразовать этот U + 2E93 в соответствующий китайский символ в java. Я пробовал использовать этот подход.

String encoding = "UTF-8";
String cp = "U+2E93".subString(2);
int cpVal=Integer.parseInt(cp,16);
String tempString = Character.toString((char)cpVal);
byte[] bytes = tempString.getBytes(Charset.forName(encoding));
result = new String(bytes);

Это нормально работает на моем локальном компьютере, где кодировка по умолчанию - UTF-8, но не работает на одной linux виртуальной машине, где кодировка по умолчанию - ISO-8859-1.

1 Ответ

3 голосов
/ 05 мая 2020

Используйте escape-последовательность Unicode.

System.out.println("\u2E93");

Если вы получаете кодовую точку в виде строки, как показано в вопросе, сделайте это следующим образом:

Java 11 +

String cp = "U+2E93";
int codePoint = Integer.parseInt(cp.substring(2), 16);
String result = Character.toString(codePoint);
System.out.println(result);

Java 5 +

String cp = "U+2E93";
int codePoint = Integer.parseInt(cp.substring(2), 16);
String result = new String(new int[] { codePoint }, 0, 1);
System.out.println(result);

Вывод (из всех 3 выше)


Для символов из дополнительных плоскостей вам необходимо указать суррогатные пары UTF-16 при использовании строкового литерала

System.out.println("\uD83D\uDC4D");
String cp = "U+1F44D";
...

Output ( с обоих)

?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...