Создайте символ из строки, содержащей код utf - PullRequest
2 голосов
/ 23 января 2010

Я пытаюсь создать символ из кода UTF. Я читаю этот код из файла, который представляет собой карту символов. Все символы указаны в коде UTF.

0020 ПРОБЕЛ
0021 восклицательный знак
0022 Цитата
.
.
.

После прочтения кода из файла я получаю этот код в виде строки. Как я могу преобразовать этот код (Stirng) в символ?

Ответы [ 3 ]

4 голосов
/ 23 января 2010

Коды хранятся в шестнадцатеричном формате, поэтому я думаю, что вы хотите это:

String code = "0021";
char c = (char)Integer.parseInt(code, 16);
System.out.println("Code: " + code + " Character: " + c);

Я предполагаю, что ни один из ваших кодов символов не превышает максимальное значение, которое может быть сохранено в символе, то есть символы в базовой многоязычной плоскости . Поскольку ваш формат данных, кажется, дополняется нулями до максимальной длины 4 шестнадцатеричных цифр, я предполагаю, что все символы, которые вы должны учитывать, на самом деле находятся в BMP.

Если это не так, вам понадобится другое решение. См. Character.toChars(int).

1 голос
/ 23 января 2010

Разобрать его в целое число, используя Integer.parseInt(String, 16), затем привести его к символу.

0 голосов
/ 23 января 2010

Похоже на UTF-16. Чтобы создать строку из этих байтов, используйте:

new String(byte[]{0x00, 0x21}, "UTF-16")

Это создает строку, содержащую восклицательный знак. Символ charAt (0).

EDIT

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

EDIT

ОК, возникло недоразумение, приведенный выше код был не решением, а примером того, как облегчить конструктору String создание строки из последовательности байтов в специальной кодировке. Как пример, это выглядело статично. Вот решение во время выполнения (зная, что особенно принятое решение подходит гораздо лучше - это просто более общее):

public char decodeUTF16(byte b1, byte b2) {
  return decode(new byte[]{b1, b2}).charAt(0);
}

public String decodeUTF16(byte[] bytes) {
  return decode(bytes, "UTF-16");
}

public String decode(byte[] bytes, String encoding) {
  return new String(bytes, encoding);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...