【问题标题】:Why isn't Java properly displaying unicode in the String? [duplicate]为什么 Java 不能在字符串中正确显示 unicode? [复制]
【发布时间】:2018-09-07 14:45:38
【问题描述】:

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

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

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

【问题讨论】:

  • 你的第二个字符有 5 位数字,这在 java 中是不可能的,但这里有一个解决方法:stackoverflow.com/questions/19557026/… 所以在你的情况下 \uD83C\uDFC3 应该可以完成这项工作

标签: java intellij-idea unicode


【解决方案1】:

Java 的转义语法是在 Unicode 预计不超过 216 个字符时设计的,因此您必须在 \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 不同,printf 不会打印换行符,除非您在格式中添加 %n。)

【讨论】:

  • 它也不起作用。那一定是我的系统有问题(我使用的是 Linux)。
  • 您是否验证过 U+1F3C3 字符在任何字体中都可见?该 fileformat.info 页面应显示 Java Data 表的前两行中的字符。或者,您可以尝试运行 gedit 并在编辑器中输入 Ctrl-Shift-U 1f3c3
  • 它只显示滑雪者,与 intellij idea 中相同。我也尝试粘贴到 vim 中,得到了相同的结果。我的系统不会在 0xffff 之外显示 unicode :|
【解决方案2】:

Java 使用 utf16,因此字符 \u1f3c3 超出其范围。您可以使用它的代理对传递字符

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

【讨论】:

  • 问题是关于 Java 而不是 Javascript
  • 它仍然没有显示它们:正在为它们显示一个小矩形。
  • @cellpowerhouse 在这种情况下,您的控制台字符集不支持该特定字符。
猜你喜欢
  • 2012-01-23
  • 1970-01-01
  • 2020-08-07
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多