如何将unicode字符放入java字符串中?

x33g5p2x  于 2021-08-25  发布在  Java
关注(0)|答案(5)|浏览(304)

此问题已在此处找到答案

从数字创建unicode字符(13个答案)
7小时前关门了。
如何将unicode字符u+1f604放入java字符串中?我试图使用

String s = "\u1F604";

但它相当于

String s = "\u1F60"+"4";

它被分成两个字符。

hxzsmxv2

hxzsmxv21#

第三种变体,尤其是 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 都是一样的。)

qltillow

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);

输出:

😄 😄 😄 😄
csbfibhn

csbfibhn3#

如果您具有字符十六进制值的字符串表示形式,则可以使用 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);

输出:

😄 😄 😄
sqserrrh

sqserrrh4#

字符的utf-16编码 U+1F6040xD83D 0xDE04 ,所以应该是:

String s = "\uD83D\uDE04";
uxh89sit

uxh89sit5#

邓克的回答是一个很好的方法。对此的简短解释是,默认情况下,unicode字符只占用4个字节,因此字符串文字转义只允许 \u#### . 但是,表情符号是代理项对,unicode保留了 U+D800U+DFFF 对于这些对,允许1024 x 1024对字符。
另一种不需要转换为utf-16并编码为代理项对的方法是使用 Character.toChars(...) :

public class Main {
	public static void main(String[] args) {
		String s = "Hello " + new String(Character.toChars(0x1f604)) + "!";
		System.out.println(s);
	}
}

在线试试吧!

相关问题