Получить Unicode-значение символа - PullRequest
66 голосов
/ 08 февраля 2010

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

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

Ответы [ 7 ]

59 голосов
/ 08 февраля 2010

Вы можете сделать это для любого символа 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 или любой другой символ Unicode?

33 голосов
/ 08 февраля 2010

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

12 голосов
/ 07 августа 2013
private static String toUnicode(char ch) {
    return String.format("\\u%04x", (int) ch);
}
6 голосов
/ 11 июня 2014
char c = 'a';
String a = Integer.toHexString(c); // gives you---> a = "61"
0 голосов
/ 13 апреля 2015

Во-первых, я получаю верхнюю сторону символа. После, получите низкую сторону. Конвертируйте все в 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);
0 голосов
/ 26 февраля 2015

вы придирчивы к использованию 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
0 голосов
/ 08 февраля 2010

Я нашел этот хороший код в сети.

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

Оригинальный артикул

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