我有一个WhatsApp聊天的txt文件,我想用Java解析它。
但所有使用的表情符号都显示为""在txt文件中。我想尝试找出如何学习实际使用的表情符号,并尝试了这个:
System.out.print( "\\u" + Integer.toHexString(line.charAt(i) | 0x10000).substring(1) );
但它会显示错误的unicode,例如\ ud83d等。
我也有这个列表,但我不确切知道如何使用它: http://grumdrig.com/emoji-list/#
答案 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