Я пытаюсь получить код выхода 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
Целое число
пожалуйста помоги.
Возможно, это все разъясняет.
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.