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

Получить значение char в java

Как я могу получить код UTF8 для char в Java? У меня есть char 'a', и мне нужно значение 97 У меня есть char 'é', и мне нужно значение 233

вот таблица для больше значений

Я пробовал Character.getNumericValue(a), но для a он дает мне 10, а не 97, любая идея, почему?

Это кажется очень простым, но любая помощь будет оценена!

4b9b3361

Ответ 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 и исходным кодом.