为什么不是';Java是否在字符串中正确显示unicode?

为什么不是';Java是否在字符串中正确显示unicode?,java,intellij-idea,unicode,Java,Intellij Idea,Unicode,我正在使用IntelliJ IDEA,我正试图打印一个带有unicode的字符串,用于滑雪者U+26F7和跑步者U+1F3C3,代码如下: System.out.println("\u26f7" + " " + "\u1f3c3"); 只有滑雪者才能正确显示。然而,IntelliJ确实用不同的颜色显示了最后3个运行程序代码,这表明存在问题。有没有办法解决这个问题?Java使用utf16,因此字符\u1f3c3超出了它的范围。您可以使用角色的surroget对传入角色 System.out.

我正在使用IntelliJ IDEA,我正试图打印一个带有unicode的
字符串,用于滑雪者U+26F7和跑步者U+1F3C3,代码如下:

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

只有滑雪者才能正确显示。然而,IntelliJ确实用不同的颜色显示了最后3个运行程序代码,这表明存在问题。有没有办法解决这个问题?

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

System.out.println("\u26f7" + "   " + "\ud83c\udfc3")

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

“\u1f3c3”
实际上是两个字符
\u1f3c
3

Java字符串始终采用UTF-16格式。因此,一个选项是查找字符的详细信息(例如,)并在字符串中使用相应的UTF-16值:0xD83C 0xDFC3→ <代码>“\uD83C\uDFC3”

另一个选项是在中使用
%c
说明符。例如:

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

(与println不同,printf不会打印换行符,除非将
%n
添加到格式中。)

第二个字符有5位数字,这在java中是不可能的,但是这里有一个解决方法:因此在您的例子中\uD83C\uDFC3应该做这项工作问题是关于Java而不是JavascriptIt仍然没有显示它们:一个小矩形显示了它们两个。@在这种情况下,您的控制台字符集不支持该特定字符。它也不起作用。那一定是我的系统出了问题(我使用的是Linux)。你确认过U+1F3C3字符在任何字体中都是可见的吗?该fileformat.info页面应在Java数据表的前两行中显示字符。或者,您可以尝试运行gedit并在编辑器中键入Ctrl-Shift-U 1f3c3。它只显示滑雪者,与intellij idea中相同。我还尝试粘贴vim,得到了相同的结果。我的系统不会在0xffff之外显示unicode:|