Java: UTF-32 в UTF-16 конвертер

1

Я пытаюсь получить код выхода java.
Пример: 1F612 ==> \ud83d\ude12

Я пытался:

String toConvert = "\ud83d\ude12";
String result = "";
for(int x=0;x<toConvert.length();x++){
    int codePoint = Character.codePointAt(toConvert, x);
    String hexStr = Integer.toHexString(codePoint);
    hexStr = formatUTF(hexStr);
    result += hexStr;
}
System.out.println(result);

Функция formatUTF:

public static String formatUTF(String hex){
    String text = hex;
    for(int x = 0; x<4-hex.length();x++)
        text = "0"+text;
    return "\\u"+text;
}

но выход:

run:
\u1f612\ude12

Примечание: 1F612 Hex = 128530 Целое число

пожалуйста помоги.

Теги:
utf-8
utf-32

1 ответ

1
Лучший ответ

Возможно, это все разъясняет.

    for (int i = 0; i < toConvert.length(); ) {
        int codePoint = Character.codePointAt(toConvert, i);
        i += Character.charCount(codePoint);
        System.out.printf("[%d] cp: %x%n", i, codePoint);
    }
    for (int i = 0; i < toConvert.length(); ++i) {
        char ch = toConvert.charAt(i);
        System.out.printf("[%d] c: %x%n", i, (int)ch);
    }

Это дает единую кодовую точку из двух 16-разрядных символов.

    [2] cp: 1f612
    [0] c: d83d
    [1] c: de12

Именно так говорит стандарт UTF-16.

  • 0
    Thanx. это то, что я ищу. Итак, я использовал не ту функцию. :п

Ещё вопросы

Сообщество Overcoder
Наверх
Меню