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

时间:2013-05-17 19:02:00

标签: java unicode string-literals unicode-literals

我正在尝试用Java编写这个unicode交叉符号():

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 个答案:

答案 0 :(得分:49)

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

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

String cross = "\ud800\udc35";

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

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

(这两个字符串是相同的。)

说了这么多,你的控制台仍然需要支持这个角色 - 你需要尝试一下来判断它是否存在。

答案 1 :(得分:3)

我相信Java代表从0x00000xFFFF的Unicode字符。 Java会将"\u10035"评估为"\u1003"以及之后的5。

答案 2 :(得分:1)

0x10035是一个补充Unicode字符。如果您希望程序渲染它,则需要支持它的字体。

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

答案 3 :(得分:0)

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