2016-03-21 6 views
1

Я хочу преобразовать 'β' в свой uni-code 'U + 03B2' используя код. Но когда я попытался преобразовать его, я получаю '63' как целое значение, которое является значением '?' знак. Он не преобразуется в правильное значение. Есть ли способ получить правильное значение 'β' т. Е. Десятичный '946', hex '03B2'.Как преобразовать специальный символ 'β' в его unicode

Я попытался:

int code = 'β'; 
    byte[] b = { (byte)code }; 
    String s = new String(b, "UTF-8"); 

ответ

2

Здесь значение в различных формах:

int code = 'β'; 
System.out.println(code);          // 946 as an int 
System.out.println(Integer.toString(code));      // 946 as a String 
System.out.println(Integer.toHexString(code));     // 3b2 
System.out.println(String.format("%04x", code));    // 03b2 
System.out.println(String.format("%04x", code).toUpperCase()); // 03B2 

(Edit: Просмотрев другие ответы теперь я знаю, что вы можете использовать строку формата "%04X" в получите ответ в форме верхнего регистра напрямую.)

+0

Я получаю 63 3f 003F 003F ? ? как выход –

+1

Я не могу это объяснить. Я только что вставил точный код, который использовал, и я его протестировал. –

+0

Unicode 003F - знак вопроса. Возможно, по какой-то причине бета-символ не распознается и рассматривается как «?». –

2

Если UTF-8 не является вашей кодировкой символов по умолчанию для платформы, вам необходимо убедиться, что исходный файл сохранен в UTF-8 en кодирования, а затем указать параметр -encoding UTF-8 при компиляции (или другой кодировке символов, которая поддерживает β).

Ваш код неверен, потому что вы принимаете char, который составляет 16 бит, и измельчает его пополам, сохраняя только нижние 8 бит. Сужение бросков может уничтожить данные; они должны быть написаны явно, чтобы заставить вас задуматься о том, что вы делаете.

Ваш код выглядит так:

int code = 0x000003B2; 
byte[] b = { 0xB2 }; 

Байт последовательность 0xB2 не является допустимым UTF-8, поэтому он декодируется с заменой символа, (U + FFFD) в строке s. Если ваше устройство вывода не настроено для отображения этого символа, оно будет заменено другим символом замены на выходе, ?.

Если вы кодирования правильно в редакторе и компилятор, это должно работать:

int code = 'β'; 
System.out.printf("U+%04X%n", code); 
1
String s = "β"; 
int i = s.codePointAt(0); 
System.out.printf("U+%04X", i); 
Смежные вопросы