此问题已在此处找到答案:
从数字创建unicode字符(13个答案)7小时前关门了。如何将unicode字符u+1f604放入java字符串中?我试图使用
String s = "\u1F604";
但它相当于
String s = "\u1F60"+"4";
它被分成两个字符。
hxzsmxv21#
第三种变体,尤其是 Character.toString(0x1f604) :
Character.toString(0x1f604)
public class Main { public static void main(String[] args) { String s1 = "Hello " + Character.toString(0x1f604) + "!"; // Since Java 11 String s2 = "Hello " + new String(new int[]{0x1f604}, 0, 1) + "!"; // < 11 System.out.println(s1 + " " + s2); } }
(注意,在其他一些语言中 \U0001f604 可以使用。在 java \u 及 \U 都是一样的。)
\U0001f604
\u
\U
qltillow2#
可以将此utf-16笑脸符号作为符号本身、十六进制或十进制代理项对或其补充代码点添加到字符串中。
// symbol itself String str1 = "😄"; // surrogate pair String str2 = "\uD83D\uDE04"; // surrogate pair to its supplementary code point value int cp = Character.toCodePoint('\uD83D', (char) 0xDE04); // since 11 - decimal codepoint to string String str3 = Character.toString(cp); // since 11 - hexadecimal codepoint to string String str4 = Character.toString(0x1f604); // output System.out.println(str1 + " " + str2 + " " + str3 + " " + str4);
输出:
😄 😄 😄 😄
csbfibhn3#
如果您具有字符十六进制值的字符串表示形式,则可以使用 Integer.parseInt 方法。
Integer.parseInt
// surrogate pair char high = (char) Integer.parseInt("D83D", 16); char low = (char) Integer.parseInt("DE04", 16); String str1 = new String(new char[]{high, low}); // supplementary code point int cp = Integer.parseInt("1F604", 16); char[] chars = Character.toChars(cp); String str2 = new String(chars); // since 11 String str3 = Character.toString(cp); // output System.out.println(str1 + " " + str2 + " " + str3);
😄 😄 😄
sqserrrh4#
字符的utf-16编码 U+1F604 是 0xD83D 0xDE04 ,所以应该是:
U+1F604
0xD83D 0xDE04
String s = "\uD83D\uDE04";
uxh89sit5#
邓克的回答是一个很好的方法。对此的简短解释是,默认情况下,unicode字符只占用4个字节,因此字符串文字转义只允许 \u#### . 但是,表情符号是代理项对,unicode保留了 U+D800 到 U+DFFF 对于这些对,允许1024 x 1024对字符。另一种不需要转换为utf-16并编码为代理项对的方法是使用 Character.toChars(...) :
\u####
U+D800
U+DFFF
Character.toChars(...)
public class Main { public static void main(String[] args) { String s = "Hello " + new String(Character.toChars(0x1f604)) + "!"; System.out.println(s); } }
在线试试吧!
5条答案
按热度按时间hxzsmxv21#
第三种变体,尤其是
Character.toString(0x1f604)
:(注意,在其他一些语言中
\U0001f604
可以使用。在 java\u
及\U
都是一样的。)qltillow2#
可以将此utf-16笑脸符号作为符号本身、十六进制或十进制代理项对或其补充代码点添加到字符串中。
输出:
csbfibhn3#
如果您具有字符十六进制值的字符串表示形式,则可以使用
Integer.parseInt
方法。输出:
sqserrrh4#
字符的utf-16编码
U+1F604
是0xD83D 0xDE04
,所以应该是:uxh89sit5#
邓克的回答是一个很好的方法。对此的简短解释是,默认情况下,unicode字符只占用4个字节,因此字符串文字转义只允许
\u####
. 但是,表情符号是代理项对,unicode保留了U+D800
到U+DFFF
对于这些对,允许1024 x 1024对字符。另一种不需要转换为utf-16并编码为代理项对的方法是使用
Character.toChars(...)
:在线试试吧!