получить значение char в java
Как я могу получить код UTF8 символа в Java ? У меня есть char 'a', и я хочу значение 97 У меня есть char 'é', и я хочу значение 233
Вот таблица для
8 ответов
char
на самом деле является числовым типом, содержащим значение unicode (UTF-16, если быть точным - вам нужно два char
s для представления символов вне 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);
}
}
}