如何检测文本中使用的是哪个Apple Emoji?

时间:2015-10-01 10:51:06

标签: java character-encoding

我有一个WhatsApp聊天的txt文件,我想用Java解析它。

但所有使用的表情符号都显示为""在txt文件中。我想尝试找出如何学习实际使用的表情符号,并尝试了这个:

‬System.out.print( "\\u" + Integer.toHexString(line.charAt(i) | 0x10000).substring(1) );

但它会显示错误的unicode,例如\ ud83d等。

我也有这个列表,但我不确切知道如何使用它: http://grumdrig.com/emoji-list/#

1 个答案:

答案 0 :(得分:1)

\uD83D是与\uDE04相匹配的代理商的一部分,实际上这些代理商一起编码以生成\u0001F604

U+1F604 (U+D83D U+DE04)以开放的嘴和微笑的眼睛产生微笑脸表情符号->?

Gist (mranney/emoji_sad.txt)可能是确定如何解析文件的起点。

实施例

您可以将其中一些JavaScript移植到Java。

import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        long codepoint = 0x1f600;
        int[] pair = findSurrogatePair(codepoint);

        System.out.printf("%s -> %s%n", toHex(codepoint),
            IntStream.of(pair).mapToObj(v -> toHex(v))
                .collect(Collectors.joining(" + ")));
    }

    /**
     * Assumes point > 0xFFFF
     * <p>
     * 
     * @param point Unicode codepoint to convert to surrogate pairs.
     * @return Returns the surrogate pairing for the input code-point.
     */
    public static int[] findSurrogatePair(final long point) {
        long offset = point - 0x10000;

        int lead = (int) (0xD800 + (offset >> 10));
        int trail = (int) (0xDC00 + (offset & 0x3FF));

        return new int[] { lead, trail };
    }

    public static String toHex(Number value) {
        return String.format("\\u%X", value);
    }
}

输出

\u1F600 -> \uD83D + \uDE00
相关问题