UnicodeBlockを使用してチェスのシンボルを印刷?

ポールLemarchand:

では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を持っています。

質問:なぜ、何を印刷し、上記のコードではないでしょうか?

VGR:

いくつかのチェスの記号文字は、その他の記号ブロック内に存在していますが、特に16ビットをチェックしているchar別のブロック内の値。チェスシンボルブロックが含まれているゼロの16ビット値を持つ文字を、それはU + 1FA00から始まり、U + 1FA6Fで終了します。

キャストすることによりchar、あなたは自分の最下位16ビットにU + FFFF上記のすべての値をトリミングしています。例えば、もしiある0x1fa60にキャスト、char続くから、あなたのブロックチェックを防ぐこと0xfa60を行います。

あなたのコードの作業を行うには、すべてのコードポイントは、16ビットの値であることを仮定して停止する必要があります。あなたはこれを変更することでそれを行うことができます。

char unicode = (char) i;

これに:

int unicode = i;

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=137710&siteId=1