将utf-8转换为Unicode以在Java字符串中查找表情符号

Lam*_*ama 0 java unicode utf-8

我正在尝试编写一个Java代码,其中包含包含表情符号的utf8字符串,我想用文本替换该表情符号。例如:

我有这段文字:???? ?????? ?????? ?????? ???????

我希望它像这样:grinningFace ???? ???? ?????? ?????? ?????? ???????

我尝试了这个:

String string = "";
    try {

        byte[] utf8Bytes = string.getBytes("UTF-8");

        string = new String(utf8Bytes, "UTF-8");
    } catch (
        UnsupportedEncodingException e
    ) {
        e.printStackTrace();
    }
    string=string.replaceAll("[\u1F600]", "grinningF");
    //also tried "\u1F600" and "u1F600"
    System.out.println(string);
Run Code Online (Sandbox Code Playgroud)

但这没用,怎么办?

Ser*_*sta 5

您的问题是表情符号不在基本多语言平面中,因为它的代码大于U + FFFF。Java字符只有16位长,因此BMP中的字符仅使用一个Java字符。BMP之外的字符以UTF16编码。

Unicode表情符号是GRINNING FACE字符U + 1F600。其utf8编码为0xf0,0x9f,0x98,0x80,其UTF-16编码为(如Jon Skeet在其评论中所述)0xd83d, 0xde00。这意味着调试器可以显示""is 的内部Java表示形式"\ud83d\ude00"

因此,您的代码应为:

string.replaceAll("\ud83d\ude00", "grinningF");
Run Code Online (Sandbox Code Playgroud)

要么

string.replaceAll("", "grinningF");
Run Code Online (Sandbox Code Playgroud)

完全一样