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)
但这没用,怎么办?
您的问题是表情符号不在基本多语言平面中,因为它的代码大于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)
完全一样
| 归档时间: |
|
| 查看次数: |
5239 次 |
| 最近记录: |