class A {
public static void main(String[] args) {
System.out.println("\u2300");
System.out.println("\u10035");
}
}
我可以轻松地写出带有横线的o(⌀),但是十字形符号没有显示出来,它只是打印数字5:
# javac A.java && java A
⌀
ဃ5
为什么?
class A {
public static void main(String[] args) {
System.out.println("\u2300");
System.out.println("\u10035");
}
}
我可以轻松地写出带有横线的o(⌀),但是十字形符号没有显示出来,它只是打印数字5:
# javac A.java && java A
⌀
ဃ5
为什么?
您正在寻找U+10035,它位于基本多语言平面之外。这意味着您不能使用\u
来指定该值,因为它仅处理U+0000到U+FFFF——在\u
之后始终有恰好四个十六进制数字。所以目前您得到的是U+1003 ("缅甸字母 GHA")后跟着'5'。
不幸的是Java不提供一种简单表达BMP之外字符的字符串字面形式。唯一的方法是将其包含在文字字面形式中(但仍在ASCII范围内),这就要使用UTF-16代理对形式:
String cross = "\ud800\udc35";
或者,您可以使用32位代码点形式作为int
:
String cross = new String(new int[] { 0x10035 }, 0, 1);
(这两个字符串相等。)
话虽如此,您的控制台仍需要支持该字符——您需要尝试一下才能确定它是否支持。
\U00010035
:) 阅读我现在附加的“UTF-16代理对”链接,了解为什么这两个值被组合在一起 - 由你来决定是否能够在脑海中做出计算,但我知道我至少不能够可靠快速地计算 ;) - Jon Skeetfor(char ch : Character.toChars(0x10035)) System.out.format("\\u%04x", (int) ch);
- McDowell我相信Java可以表示从0x0000
到0xFFFF
的Unicode字符。Java会将"\u10035"
转换成"\u1003"
再加上一个5。
0x10035是一个补充的Unicode字符。如果您想使程序能够渲染它,您需要一个支持它的字体。
http://www.oracle.com/technetwork/articles/javase/supplementary-142654.html
Unicode转义符长度为4个字符。你正在打印\u1003后面跟着'5'。你确定你有正确的代码点吗?
$ txr -c '@(bind a "\x10035")'
输出:a=""
。是的!当然;我不会随意截断指定字符的十六进制数字。 - Kaz