26

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

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

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

# javac A.java && java A
⌀
ဃ5

为什么?

4

4 回答 4

51

您正在寻找 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";

或者,您可以将 32 位代码点形式用作int

String cross = new String(new int[] { 0x10035 }, 0, 1);

(这两个字符串相等。)

说了这么多,您的控制台仍然需要支持该角色 - 您需要尝试它以确定它是否支持。

于 2013-05-17T19:06:40.643 回答
3

0x0000我相信 Java 代表从到 的Unicode 字符0xFFFF。Java 将评估"\u10035"为任何"\u1003"值,然后评估为 5。

于 2013-05-17T19:06:16.937 回答
1

0x10035 是补充的 Unicode 字符。如果你想让你的程序渲染它,你需要支持它的字体。

http://www.oracle.com/technetwork/articles/javase/supplementary-142654.html

于 2013-05-17T19:24:33.273 回答
0

Unicode 转义符长度为 4 个字符。您正在打印 \u1003 后跟“5”。你确定你有正确的代码点吗?

于 2013-05-17T19:08:33.947 回答