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

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

Вот таблица для

8 ответов


char на самом деле является числовым типом, содержащим значение unicode (UTF-16, если быть точным - вам нужно два chars для представления символов вне BMP) символа. Вы можете сделать с ним все, что вы можете сделать с int.

Character.getNumericValue() пытается интерпретировать символ как цифру.


вы можете использовать метод codePointAt(int index) java.ленг.Строки. Вот пример:

"a".codePointAt(0) --> 97
"é".codePointAt(0) --> 233

Если вы хотите избежать ненужного создания строк, следующие работы также могут быть использованы для массивов символов:

Character.codePointAt(new char[] {'a'},0)

эти коды "UTF-8"не являются таковыми. На самом деле это просто значения Unicode, согласно диаграммы кода Unicode.

таким образом, " é " на самом деле 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

Это дает хороший результат:

int a = 'a';
System.out.println(a); // outputs 97

дополнительно:

System.out.println((int)'é');

выводит 233.


мой метод сделать это примерно так:

char c = 'c';
int i = Character.codePointAt(String.valueOf(c), 0);
// testing
System.out.println(String.format("%c -> %d", c, i)); // c -> 99

Ваш вопрос неясен. Вы хотите, чтобы кодовая точка 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);
   }
}

(есть также онлайн-страница Unicode для UTF8, но у меня нет URL-адреса на этом машина)


существует библиотека с открытым исходным кодом MgntUtils, которая имеет служебный класс StringUnicodeEncoderDecoder. Этот класс предоставляет статические методы, которые преобразуют любую строку в последовательность Unicode наоборот. Очень простой и полезный. Чтобы преобразовать строку, вы просто делаете:

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);

например, строка "Hello World" будет преобразована в

" \u0048\u0065\u006c\u006c\u006c \ u006f\u0020 \u0057\u006f\u0072\u006c\u0064"

Он работает с любым языком. Вот ссылка на статья, которая объясняет все те в библиотеке: MgntUtils. Найдите подзаголовок "String Unicode converter". Статья дает вам ссылку на Maven Central, где вы можете получить артефакты и github, где вы можете получить сам проект. Библиотека поставляется с хорошо написанным javadoc и исходным кодом.


вы можете создать простой цикл, чтобы перечислить все символы UTF-8, доступные следующим образом:

public class UTF8Characters {
    public static void main(String[] args) {
        for (int i = 12; i <= 999; i++) {
            System.out.println(i +" - "+ (char)i);
        }
    }
}