LoginSignup
0
0

More than 1 year has passed since last update.

Unicodeでの文字種の判別

Posted at

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を使用してもカタカナかどうかの判定は上手くすることができない。

漢字についても注意が必要。
よく使用される[一-龠々]の正規表現はサロゲートペアなどに対応していない。
色々と落とし穴があるため、文字種の判定を行う際は詳細を調べたほうが良い。

便利なサイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0