gpt4 book ai didi

java - 使用 UnicodeBlock 打印国际象棋符号?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:39 25 4
gpt4 key购买 nike

随着 jdk12,出现了国际象棋符号 ( source ):

Unicode 11.0.0 introduced the following new features that are now included in JDK 12

[...] 4 blocks for the following existing scripts:

  • Georgian Extended

  • Mayan Numerals

  • ndic Siyaq Numbers

  • Chess Symbols

考虑到这一点,我尝试使用以下代码打印这些字符,以测试功能并稍后在一个小国际象棋游戏中使用它们:

Character.UnicodeBlock block = Character.UnicodeBlock.CHESS_SYMBOLS;
for (int i = 0; i < 1114112; i++) {
char unicode = (char) i;
if(Character.UnicodeBlock.of(unicode) == block) {
System.out.println(unicode);
}
}

但是,它没有打印任何东西。如果我将 CHESS_SYMBOLS 替换为例如 ARABIC,该代码就可以工作。我有 Java 12.0.1。

问题:为什么上面的代码没有打印任何东西?

最佳答案

一些国际象棋符号字符存在于 Miscellaneous Symbols block 中,但您专门检查不同 block 中的 16 位 char 值。 Chess Symbols block 包含具有 16 位值的 个字符;它从 U+1FA00 开始,到 U+1FA6F 结束。

通过转换为 char,您将把所有高于 U+FFFF 的值修剪到它们的最低 16 位;例如,如果 i0x1fa60 ,将其转换为 char 将使它成为 0xfa60,这会阻止您的 block 检查成功。

要让您的代码正常工作,您需要停止假设所有代码点都是 16 位值。你可以通过改变这个来做到这一点:

char unicode = (char) i;

为此:

int unicode = i;

关于java - 使用 UnicodeBlock 打印国际象棋符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56130948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com