Получить значение юникода персонажа

Есть ли способ в 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);
Другие вопросы по тегам