JavaのUnicodeBlockについて調べてみた

投稿 2023年10月1日

更新 2023年10月1日

専門用語の数:

JavaのUnicodeBlockについて調べてみた

~ 目次 ~

UnicodeBlockとは?

判定方法

ややこしい…

リンク

まとめ

UnicodeBlockとは?

文字列のUnicodeが、どういう種類なのか?

というのをJava上で分類したものになります。


例えば、日本語のひらがなだと

のような形で表現されています。

判定方法

下記はJava17で確認しております。


また判定を行う前に、Unicode正規化しています。

※NFKC(互換分解後の正規合成)

ひらがな

カタカナ

漢字(常用漢字2136文字)

ややこしい…

そう思った方、いらっしゃるかと思います。

自分自身も思っています…


実際、これでもまだ簡単なほうなんです。。。


上記サンプルコードでは「codePoints」

というメソッドを使用していますが、

「chars」メソッドのほうが簡単に書けます。


ただ、漢字が想像を絶する量ありますし、

これから説明する「サロゲートペア」とか言う、

特殊な文字等があるため、対応できない文字もあります。

特殊文字

Unicodeとは?

この世には様々な文字コードがあります。

世界中で各国の言語に文字コードを付けてきたわけです。

そうすると、文字コードによって表す文字が違ったりします。


それじゃ困る。

そこで生まれたのがUnicodeです。


Unicodeとは世界中の文字に、共通の番号を付けたものです。

Unicodeの問題点

Unicodeを広めた時点では、

16bit(=65536種)ですべての文字を表現できる

と思っていました。


結果、足りませんでした。


その対策として出てきたのが、「サロゲートペア」です。

サロゲートペアとは?

2文字分の領域を組み合わせて、1文字を表現しようという仕組みです。


決められた数字があれば、もう1文字分読み込んで、

2つ合わせて1文字として認識させるという事です。


常用漢字(2136文字)中、1文字だけサロゲートペアがありました。

「𠮟」です。

「chars」だとこの文字だけが、ちゃんと判定できませんでした。

その他

異体字シーケンスだったり結合文字列だったり、

は「codePoints」でも判定できないです。


結論…ややこしすぎます。

GitHubにもメソッド版を上げています。

そちらも参考にどうぞ。

まとめ

文字コードやUnicode、ややこしいなとは思ってましたが、

改めて調べると、余計ややこしいという事がわかりました。


プログラムやってたら、絶対1回は文字コード関係でつまづきますよね。


以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント一覧

コメントがまだありません

コメントを投稿してみる

コメント(必須※500文字以内)

お名前(必須※30文字以内)

※日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)