Получить значение юникода персонажа
Есть ли способ в Java, чтобы я мог получить Unicode эквивалент любого символа? например
Предположим, метод getUnicode(char c)
, Вызов getUnicode('÷')
должен вернуться \u00f7
,
7 ответов
Вы можете сделать это для любого символа Java, используя один вкладыш здесь:
System.out.println( "\\u" + Integer.toHexString('÷' | 0x10000).substring(1) );
Но это будет работать только для символов Unicode до Unicode 3.0, поэтому я решил, что вы можете сделать это для любого символа Java.
Поскольку Java была разработана задолго до появления Unicode 3.1, и, следовательно, примитив char в Java не подходит для представления Unicode 3.1 и более поздних версий: больше не отображается отображение "один символ Unicode на один символ Java" (вместо этого используется чудовищный хак).
Таким образом, вы действительно должны проверить свои требования здесь: вам нужно поддерживать Java char или любой другой символ Unicode?
Если у вас есть Java 5, используйте char c = ...; String s = String.format ("\\u%04x", (int)c);
Если ваш источник не является символом Unicode (char
) но строка, вы должны использовать charAt(index)
чтобы получить символ Unicode в позиции index
,
Не использовать codePointAt(index)
потому что это возвратит 24-битные значения (полный Unicode), которые не могут быть представлены только 4 шестнадцатеричными цифрами (для этого нужно 6). Смотрите документы для объяснения.
[EDIT] Чтобы было понятно: в этом ответе используется не Unicode, а метод, который Java использует для представления символов Unicode (т. Е. Суррогатных пар), поскольку char 16-битный, а Unicode 24-битный. Вопрос должен быть: "Как я могу конвертировать char
к четырехзначному шестнадцатеричному числу ", поскольку речь идет не о Юникоде.
private static String toUnicode(char ch) {
return String.format("\\u%04x", (int) ch);
}
char c = 'a';
String a = Integer.toHexString(c); // gives you---> a = "61"
Придирчивы ли вы к использованию Unicode, потому что с java проще, если вы напишите в своей программе использование значения "dec" или (HTML-кода), тогда вы можете просто приводить типы данных между char и int
char a = 98;
char b = 'b';
char c = (char) (b+0002);
System.out.println(a);
System.out.println((int)b);
System.out.println((int)c);
System.out.println(c);
Дает этот вывод
b
98
100
d
Я нашел этот хороший код в Интернете.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Unicode {
public static void main(String[] args) {
System.out.println("Use CTRL+C to quite to program.");
// Create the reader for reading in the text typed in the console.
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
try {
String line = null;
while ((line = bufferedReader.readLine()).length() > 0) {
for (int index = 0; index < line.length(); index++) {
// Convert the integer to a hexadecimal code.
String hexCode = Integer.toHexString(line.codePointAt(index)).toUpperCase();
// but the it must be a four number value.
String hexCodeWithAllLeadingZeros = "0000" + hexCode;
String hexCodeWithLeadingZeros = hexCodeWithAllLeadingZeros.substring(hexCodeWithAllLeadingZeros.length()-4);
System.out.println("\\u" + hexCodeWithLeadingZeros);
}
}
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
}
Во-первых, я получаю высокую сторону чарса. После, получите низкую сторону. Конвертировать все в HexString и поставить префикс.
int hs = (int) c >> 8;
int ls = hs & 0x000F;
String highSide = Integer.toHexString(hs);
String lowSide = Integer.toHexString(ls);
lowSide = Integer.toHexString(hs & 0x00F0);
String hexa = Integer.toHexString( (int) c );
System.out.println(c+" = "+"\\u"+highSide+lowSide+hexa);