Преобразовать обычный текст Unicode в общую строку - PullRequest
0 голосов
/ 27 июля 2010

Я получил строку Unicode с внешнего сервера, как это:

005400610020007400650020007400ED0020007400FA0020003F0020003A0029

, и я должен декодировать ее с помощью Java.Я знаю, что префикс '\ u' создает магию (то есть '\ u0054' -> 'T'), но я не знаю, как преобразовать его для использования в качестве общей строки.

Заранее спасибо.

Редактировать : Спасибо всем.Все ответы работают, но мне пришлось выбрать только один :(

Снова спасибо.

Ответы [ 3 ]

4 голосов
/ 27 июля 2010

Похоже на кодировку UTF-16.Вот метод для его преобразования:

public static String decode(String hexCodes, String encoding) throws UnsupportedEncodingException {
    if (hexCodes.length() % 2 != 0)
        throw new IllegalArgumentException("Illegal input length");
    byte[] bytes = new byte[hexCodes.length() / 2];
    for (int i = 0; i < bytes.length; i++)
        bytes[i] = (byte) Integer.parseInt(hexCodes.substring(2 * i, 2 * i + 2), 16);
    return new String(bytes, encoding);
}

public static void main(String[] args) throws UnsupportedEncodingException {
    String hexCodes = "005400610020007400650020007400ED0020007400FA0020003F0020003A0029";
    System.out.println(decode(hexCodes, "UTF-16"));
}

}

Ваш пример возвращает «Ta te tí tú? :)»

2 голосов
/ 27 июля 2010

Вы можете просто разделить строку на строки длиной 4, а затем использовать Integer.parseInt(s, 16), чтобы получить числовое значение.Примените это к char и постройте из него Струну.Для приведенного выше примера вы получите:

Ta te tí tú?:)

1 голос
/ 27 июля 2010

Его можно интерпретировать как UTF-16 или как UCS2 (последовательность кодовых точек, закодированных в 2 байта, шестнадцатеричное представление), это эквивалентно, пока мы не выпадаем из BMP.Альтернативный метод разбора:

 public static String mydecode(String hexCode) {
    StringBuilder sb = new StringBuilder();
    for(int i=0;i<hexCode.length();i+=4) 
      sb.append((char)Integer.parseInt(hexCode.substring(i,i+4),16));
    return sb.toString();
 }

 public static void main(String[] args)  {
    String hexCodes = "005400610020007400650020007400ED0020007400FA0020003F0020003A0029";
    System.out.println(mydecode(hexCodes));
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...