Pau*_*and 8 java unicode java-12
附带jdk12,国际象棋符号(来源):
Unicode 11.0.0引入了JDK 12现在包含的以下新功能
[...] 4个块,用于以下现有脚本:
格鲁吉亚扩展
玛雅数字
ndic Siyaq数字
象棋符号
考虑到这一点,我尝试使用以下代码打印这些字符,以测试功能并稍后在小型国际象棋游戏中使用它们:
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。
问题:上面的代码为什么不打印任何内容?
杂项符号块中存在一些国际象棋符号字符,但是您专门在其他块中检查16位char值。国际象棋符号块包含零个字符和16位值。它开始于U + 1FA00,结束于U + 1FA6F。
通过强制转换为char,可以将U + FFFF以上的所有值修整为最低的16位。例如,如果i为0x1fa60,将其强制转换为a char将使其变为0xfa60,这将阻止您的块检查成功。
为了使您的代码正常工作,您需要停止假设所有代码点均为16位值。您可以通过更改此方法来做到这一点:
char unicode = (char) i;
对此:
int unicode = i;
| 归档时间: | 
 | 
| 查看次数: | 147 次 | 
| 最近记录: |