如何在Java中编写unicode cross符号?

Dog*_*Dog 26 java unicode string-literals unicode-literals

我正在尝试编写这个unicode十字符号(在Java中:

class A {
    public static void main(String[] args) {
        System.out.println("\u2300");
        System.out.println("\u10035");
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以通过它写一条线()就好了,但十字符号没有出现,而只是打印数字5:

# javac A.java && java A
?
?5
Run Code Online (Sandbox Code Playgroud)

为什么?

Jon*_*eet 49

你正在寻找U + 10035,它在Basic Multilingual Plane之外.这意味着你不能\u用来指定值,因为它只处理U + 0000到U + FFFF - 后面总是有四个十六进制数字\u.所以目前你有U + 1003("MYANMAR LETTER GHA"),然后是'5'.

遗憾的是,Java没有提供字符串文字形式,这使得BMP之外的字符很容易表达.将它包含在文字(但仍然是ASCII)中的唯一方法是使用UTF-16代理对形式:

String cross = "\ud800\udc35";
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用32位代码点表单作为int:

String cross = new String(new int[] { 0x10035 }, 0, 1);
Run Code Online (Sandbox Code Playgroud)

(这两个字符串相等.)

说了这么多,你的控制台仍然需要支持这个角色 - 你需要尝试一下才能找出它.

  • 获取各种编码的一种方法是从FileFormat.info获取:http://www.fileformat.info/info/unicode/char/10035/index.htm (2认同)
  • 在Java中打印文字形式的代码点:`for(char ch:Character.toChars(0x10035))System.out.format("\\ u%04x",(int)ch);` (2认同)