Подтвердить что ты не робот

Получить значение unicode символа

Есть ли какой-либо способ в Java, чтобы я мог получить Unicode-эквивалент любого символа? например.

Предположим, что метод getUnicode(char c). Вызов getUnicode('÷') должен возвращать \u00f7.

4b9b3361

Ответ 1

Вы можете сделать это для любой 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 или любой возможный символ Юникода?

Ответ 2

Если у вас есть 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-значный шестнадцатеричный номер", так как он (действительно) не относится к Юникоду.

Ответ 3

private static String toUnicode(char ch) {
    return String.format("\\u%04x", (int) ch);
}

Ответ 4

char c = 'a';
String a = Integer.toHexString(c); // gives you---> a = "61"

Ответ 5

Я нашел этот приятный код в Интернете.

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();
  }
 }
}

Оригинальная статья

Ответ 6

Вы придирчивы к использованию 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

Ответ 7

Во-первых, я получаю верхнюю сторону 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);