Есть ли какой-либо способ в Java, чтобы я мог получить Unicode-эквивалент любого символа? например.
Предположим, что метод getUnicode(char c)
. Вызов getUnicode('÷')
должен возвращать \u00f7
.
Есть ли какой-либо способ в Java, чтобы я мог получить Unicode-эквивалент любого символа? например.
Предположим, что метод getUnicode(char c)
. Вызов getUnicode('÷')
должен возвращать \u00f7
.
Вы можете сделать это для любой Java char, используя один вкладыш здесь:
System.out.println( "\\u" + Integer.toHexString('÷' | 0x10000).substring(1) );
Но он будет работать только для символов Unicode до Unicode 3.0, поэтому я поставил себе задачу сделать это для любой Java char.
Поскольку Java был разработан до появления Unicode 3.1, и, следовательно, примитив Java char неадекватен, чтобы представлять Unicode 3.1 и выше: больше нет одного символа Unicode для одного Java char (вместо этого чудовищный хак используется).
Итак, вам действительно нужно проверить свои требования здесь: вам нужно поддерживать Java char или любой возможный символ Юникода?
Если у вас есть Java 5, используйте char c = ...; String s = String.format ("\\u%04x", (int)c);
Если ваш источник не является символом Юникода (char
), а строкой, вы должны использовать charAt(index)
, чтобы получить символ Юникода в позиции index
.
Не используйте codePointAt(index)
, потому что это приведет к возврату 24-битных значений (полный Юникод), которые не могут быть представлены только четырьмя шестнадцатеричными цифрами (ему нужно 6). См. документы для объяснения.
[EDIT] Чтобы сделать это ясно: этот ответ не использует Юникод, но метод, который использует Java для представления символов Юникода (т.е. суррогатных пар), поскольку char составляет 16 бит, а Юникод - 24 бит. Вопрос должен быть следующим: "Как преобразовать char
в 4-значный шестнадцатеричный номер", так как он (действительно) не относится к Юникоду.
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"
Я нашел этот приятный код в Интернете.
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();
}
}
}
Вы придирчивы к использованию 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
Во-первых, я получаю верхнюю сторону char. Позже получите нижнюю сторону. Преобразуйте все вещи в 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);