Unicodeでの文字種
Unicodeでは(Shift-JISなどと同じく)文字ごとにコードポイントという番号が割り当てられている。
コードポイントは、Scriptという言語による文字のグループでおおまかに分類されている。
例えば日本語だと、ひらがながHiragana
、カタカナがKatakana
、漢字がHan
。
Scriptの中で、さらにBlockという連続した文字コードの範囲が定義されている。
例えば漢字にはCJK Unified Ideographs(CJK統合漢字。中国語・日本語・韓国語で使用される漢字を統合したもの)、CJK Unified Ideographs Extension Aなどがある。
文字種の判別の実装
Hiraganaの情報を見るとRangeは 3040–309F
であることがわかる。
Javaで一般的なひらがなを判定したい場合、イメージとしてはScriptを使用すると"あ".matches("\\p{script=Hiragana}+")
のように、Blockを使用するとUnicodeBlock.of('あ') == UnicodeBlock.HIRAGANA
や"あ".matches("^[\\u3040-\\u309F]+$")
のように書くことができる。
文字の種類は正規表現でも判定でき、例えばひらがななら[ぁ-ん]
、半角カタカナなら[ヲ-゚]
を使用する。
半角カタカナの場合[ァ-ン]
等でない理由はHalfwidth and Fullwidth Forms(Halfwidth Katakana)を見ると分かる(コードの範囲としてはFF61-FF9F
)。
また、Halfwidth and Fullwidth Formsにはカタカナ以外も含まれるのでUnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
を使用してもカタカナかどうかの判定は上手くすることができない。
漢字についても注意が必要。
よく使用される[一-龠々]
の正規表現はサロゲートペアなどに対応していない。
色々と落とし穴があるため、文字種の判定を行う際は詳細を調べたほうが良い。
便利なサイト
-
https://home.unicode.org/
- https://www.unicode.org/charts/ ScriptsやBlock別に文字の一覧を確認できる。
- https://util.unicode.org/UnicodeJsps/character.jsp 任意の文字の詳細情報を検索できる。
-
https://rakko.tools/tools/89/ (日本語サイト)
- 文字からコードポイント・HTMLエンティティ・文字ブロックなどを検索できる。コードポイントからの検索もできる。