为什么 Java 不能在字符串中正确显示 unicode?



我正在使用IntelliJ IDEA,我试图使用以下代码打印一个string,该具有滑雪者U +26F7和跑步者U + 1F3C3的Unicode

System.out.println("u26f7" + "   " + "u1f3c3");

只有滑雪者才能正确显示。但是,IntelliJ 确实以不同的颜色显示运行器代码的最后 3 个,表明存在问题。关于如何解决这个问题的任何想法?

Java 的转义语法是在 Unicode 预计不超过 216个字符时设计的,因此您必须在u处指定四个十六进制数字。 不多也不少。

"u1f3c3"其实是u1f3c3两个角色。

Java 字符串始终采用 UTF-16。 因此,一种选择是查找字符的详细信息(例如,此处(,并在字符串中使用相应的 UTF-16 值:0xD83C 0xDFC3 →"uD83CuDFC3"

另一种选择是在java.util.Formatter中使用%c说明符。 例如:

System.out.printf("%c   %c%n", 0x26f7, 0x1f3c3);

(与 println 不同,printf 不会打印换行符,除非您在格式中添加%n

Java 使用 utf16,因此字符u1f3c3超出其范围。您可以使用它的超额对传入角色

System.out.println("u26f7" + "   " + "ud83cudfc3")