Я могу отображать смайлики в текстовом виде таким образом , как установить смайлики с помощью юникода в Android textview , но как преобразовать что-то вроде "uD83D���" в кодовую точку 0x1F604 ("uD83D���" представляет 0x1F604)?


person JackyWhite    schedule 25.04.2016    source источник
comment
Подробнее см. здесь en.wikipedia.org/wiki/   -  person Henry    schedule 25.04.2016


Ответы (4)


Сделайте что-нибудь вроде этого.

Преобразование UTF-16 в UTF-8

String text = new String("uD83D\uDE04".getBytes(), StandardCharsets.UTF_8);

Получить код

int codepoint = text.codePointAt(0);

Преобразовать в Unicode

String yourUnicode="U+"+Integer.toHexString(codepoint)
person Gowtham Kumar    schedule 24.04.2017

Я нахожу способ: java.lang.Character.toCodePoint (символ высокий, символ низкий)

int ss1 = Integer.parseInt("d83d", 16);
int ss2 = Integer.parseInt("de04", 16);

char chars = Character.toChars(ss1)[0];
char chars2 = Character.toChars(ss2)[0];

int codepoint = Character.toCodePoint(chars, chars2);
String emojiString = new String(Character.toChars(codepoint));
person JackyWhite    schedule 26.04.2016
comment
Это просто сложный способ сделать emojiString = "\ud83d\ude04" - person Henry; 26.04.2016
comment
@ Генри Ты прав. Я просто перепутал эти два: String s = \���\���;String s = =������ - person JackyWhite; 26.04.2016

Благодаря @Henry мне легко получить emojiString:

String ss1 = "d83d";
String ss2 = "de04";
int in1 = Integer.parseInt(ss1, 16);
int in2 = Integer.parseInt(ss2, 16);
String s1 = Character.toString((char)in1);//   http://stackoverflow.com/questions/5585919/creating-unicode-character-from-its-number
String s2 = Character.toString((char)in2);
String emojiString = s1+s2;
person JackyWhite    schedule 26.04.2016

Я исправляю это, создавая этот метод:

fun encodeEmoji(message: String): String {
    try {
        val messageEscape = StringEscapeUtils.escapeEcmaScript(message)
        val chars = Character.toChars(
                Integer.parseInt(messageEscape
                        .subSequence(2, 6).toString(), 16))[0]
        val chars2 = Character.toChars(
                Integer.parseInt(messageEscape
                        .subSequence(8, messageEscape.length).toString(), 16))[0]
        val codepoint = Character.toCodePoint(chars, chars2)
        return Integer.toHexString(codepoint)
    } catch (e: UnsupportedEncodingException) {
        return message
    }
}
person Alexiscanny    schedule 16.04.2018