【问题标题】:How to write unicode cross symbol in Java?如何在 Java 中编写 unicode 十字符号?
【发布时间】:2013-05-13 01:00:34
【问题描述】:

我正在尝试用 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

为什么?

【问题讨论】:

  • 您所询问的角色来自 Linear-B 脚本。这真的是你想要的吗?通常,您会发现 BMP 之外的字符在通用字体中通常不可用。
  • @parsifal:我试图为路边的公用事业民意调查制作 unicode 艺术。
  • 这种事情让我想知道,我用自己的编程语言做对了吗? $ txr -c '@(bind a "\x10035")' 输出:a="????"。对!当然;我不会在四点处任意截断指定字符的十六进制数字。
  • 老兄,你是怎么想出这么大问题的

标签: java unicode string-literals unicode-literals


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 查看 Jon Skeet 的回答以了解 BMP 之外的内容。
    【解决方案3】:

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

    (这两个字符串相等。)

    话虽如此,您的控制台仍需要支持该角色 - 您需要尝试一下以了解它是否支持。

    【讨论】:

    • 我明白了。您是如何获得这 2 个 unicode 转义序列的?在编写 unicode 字符串文字时,有没有一种快速的方法可以在我的脑海中完成?
    • @Dog:说实话,我写了一些 C# 代码 - 因为在 C# 中我可以使用 \U00010035 :) 阅读我现在包含的“UTF-16 代理对”链接到看看为什么将这两个值放在一起 - 由你来决定你是否可以在脑海中进行数学运算,但我知道我不能......至少不能可靠和快速;)
    • 获取各种编码的一种方法是从 FileFormat.info:fileformat.info/info/unicode/char/10035/index.htm
    • @parsifal:很好——我没见过。
    • 在 Java 中打印代码点的文字形式:for(char ch : Character.toChars(0x10035)) System.out.format("\\u%04x", (int) ch);
    【解决方案4】:

    我相信 Java 表示从 0x00000xFFFF 的 Unicode 字符。 Java 会将 "\u10035" 评估为 "\u1003" 的任何值,然后是 5。

    【讨论】:

      猜你喜欢
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 2012-03-18
      • 2021-06-01
      相关资源
      最近更新 更多