class A {
public static void main(String[] args) {
System.out.println("\u2300");
System.out.println("\u10035");
}
}
我可以通过它写一个o(⌀)就好了,但十字符号没有出现,而只是打印数字5:
# javac A.java && java A
⌀
ဃ5
为什么?
答案 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代表从0x0000
到0xFFFF
的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'。你确定你有正确的代码点吗?