投稿 2023年10月1日
更新 2023年10月1日
専門用語の数:少
文字列のUnicodeが、どういう種類なのか?
というのをJava上で分類したものになります。
例えば、日本語のひらがなだと
のような形で表現されています。
下記はJava17で確認しております。
また判定を行う前に、Unicode正規化しています。
※NFKC(互換分解後の正規合成)
そう思った方、いらっしゃるかと思います。
自分自身も思っています…
実際、これでもまだ簡単なほうなんです。。。
上記サンプルコードでは「codePoints」
というメソッドを使用していますが、
「chars」メソッドのほうが簡単に書けます。
ただ、漢字が想像を絶する量ありますし、
これから説明する「サロゲートペア」とか言う、
特殊な文字等があるため、対応できない文字もあります。
この世には様々な文字コードがあります。
世界中で各国の言語に文字コードを付けてきたわけです。
そうすると、文字コードによって表す文字が違ったりします。
それじゃ困る。
そこで生まれたのがUnicodeです。
Unicodeとは世界中の文字に、共通の番号を付けたものです。
Unicodeを広めた時点では、
16bit(=65536種)ですべての文字を表現できる
と思っていました。
結果、足りませんでした。
その対策として出てきたのが、「サロゲートペア」です。
2文字分の領域を組み合わせて、1文字を表現しようという仕組みです。
決められた数字があれば、もう1文字分読み込んで、
2つ合わせて1文字として認識させるという事です。
常用漢字(2136文字)中、1文字だけサロゲートペアがありました。
「𠮟」です。
「chars」だとこの文字だけが、ちゃんと判定できませんでした。
異体字シーケンスだったり結合文字列だったり、
は「codePoints」でも判定できないです。
結論…ややこしすぎます。
GitHubにもメソッド版を上げています。
そちらも参考にどうぞ。
文字コードやUnicode、ややこしいなとは思ってましたが、
改めて調べると、余計ややこしいという事がわかりました。
プログラムやってたら、絶対1回は文字コード関係でつまづきますよね。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。
コメント一覧