Получить значение char в java
Как я могу получить код UTF8 для char в Java?
У меня есть char 'a', и мне нужно значение 97
У меня есть char 'é', и мне нужно значение 233
вот таблица для больше значений
Я пробовал Character.getNumericValue(a)
, но для a он дает мне 10, а не 97, любая идея, почему?
Это кажется очень простым, но любая помощь будет оценена!
Ответы
Ответ 1
char
на самом деле является числовым типом, содержащим значение юникода (UTF-16, а точнее - вам нужно два char
для представления символов вне BMP) символа. Вы можете сделать все с этим, что вы можете сделать с помощью int
.
Character.getNumericValue()
пытается интерпретировать символ как цифру.
Ответ 2
Для этого можно использовать метод codePointAt (int index) для java.lang.String. Вот пример:
"a".codePointAt(0) --> 97
"é".codePointAt(0) --> 233
Если вы хотите избежать создания строк без необходимости, то также работает и может использоваться для char массивов:
Character.codePointAt(new char[] {'a'},0)
Ответ 3
Эти коды "UTF-8" не такие вещи. На самом деле они являются просто значениями Юникода, согласно диаграммам кода Юникода.
Таким образом, 'é' на самом деле является U + 00E9 - в UTF-8 оно будет представлено двумя байтами {0xc3, 0xa9}.
Теперь, чтобы получить значение Unicode - или, если быть более точным, значение UTF-16, как то, что Java использует внутренне, - вам просто нужно преобразовать значение в целое число:
char c = '\u00e9'; // c is now e-acute
int i = c; // i is now 233
Ответ 4
Это дает хороший результат:
int a = 'a';
System.out.println(a); // outputs 97
Аналогично:
System.out.println((int)'é');
распечатывает 233
.
Обратите внимание, что первый пример работает только для символов, включенных в стандартный и расширенный наборы символов ASCII. Второй работает со всеми символами Юникода. Вы можете достичь того же результата, умножив символ на 1. System.out.println(1 * 'é');
Ответ 5
Мой способ сделать это примерно так:
char c = 'c';
int i = Character.codePointAt(String.valueOf(c), 0);
// testing
System.out.println(String.format("%c -> %d", c, i)); // c -> 99
Ответ 6
Твой вопрос непонятен. Вы хотите кодировать Unicode для определенного символа (который является примером, который вы дали), или вы хотите перевести кодовую точку Unicode в последовательность байтов UTF-8?
Если первый, то я рекомендую кодовые диаграммы в http://www.unicode.org/
Если последнее, то следующая программа сделает это:
public class Foo
{
public static void main(String[] argv)
throws Exception
{
char c = '\u00E9';
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStreamWriter out = new OutputStreamWriter(bos, "UTF-8");
out.write(c);
out.flush();
byte[] bytes = bos.toByteArray();
for (int ii = 0 ; ii < bytes.length ; ii++)
System.out.println(bytes[ii] & 0xFF);
}
}
(там также доступна онлайн-юникод на страницу UTF8, но у меня нет URL-адреса на этом компьютере)
Ответ 7
Вы можете создать простой цикл, чтобы отобразить все символы UTF-8, доступные следующим образом:
public class UTF8Characters {
public static void main(String[] args) {
for (int i = 12; i <= 999; i++) {
System.out.println(i +" - "+ (char)i);
}
}
}
Ответ 8
Существует библиотека с открытым исходным кодом MgntUtils, которая имеет класс Utility класса StringUnicodeEncoderDecoder. Этот класс предоставляет статические методы, которые преобразуют любую строку в Unicode, наоборот, наоборот. Очень просто и полезно. Чтобы преобразовать String, вы просто выполните:
String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);
Например, строка "Hello World" будет преобразована в
"\ u0048\u0065\u006c\u006c\u006f\u0020
\ U0057\u006f\u0072\u006c\u0064"
Он работает с любым языком. Вот ссылка на статью, в которой объясняются все тексты о библиотеке: MgntUtils. Ищите субтитр "Конвертер строк Unicode". Статья дает вам ссылку на Maven Central, где вы можете получить артефакты и github, где вы можете получить сам проект. Библиотека поставляется с хорошо написанным javadoc и исходным кодом.