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

时间:2018-09-07 14:45:38

标签: java intellij-idea unicode

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

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

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

2 个答案:

答案 0 :(得分:0)

Java使用utf16,因此字符\u1f3c3不在其范围内。您可以使用它的替代配对来传递角色

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

答案 1 :(得分:0)

Java的转义语法是在Unicode预期不超过2个 16 字符的情况下设计的,因此必须在\u处指定正好四个十六进制数字。不多不少。

"\u1f3c3"实际上是两个字符\u1f3c3

Java字符串在UTF-16中总是 。因此,一种选择是查找有关字符的详细信息(例如here),并在字符串中使用相应的UTF-16值:0xD83C 0xDFC3→"\uD83C\uDFC3"

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

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

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