(Kotlin)Unicode正規化による半角全角変換について
java.text.Normalizer
kotlinで半角全角を変換する方法を探すと、java.text.Normalizer
を使う手法が見つかる。
java.text.Normalizer
はjavaの標準ライブラリだが、全角半角を変換するライブラリではなく、Unicodeの正規化を目的としているライブラリ。
ざっくり「全角半角などの表記揺れを統一する」目的で使うもので、文字種に応じて挙動が変わる。
例えば以下のような感じ。
- 日本語のカタカナは全角で統一
- 英数字は半角で統一
なので半角全角変換用途で使うと痛い目を見る。
参考:
- 全角・半角変換をNormalizerでやる場合、気を付けておきたいこと : Javaありがたや
- Qiita記事 | Unicode正規化
-
Javaにおける文字列の全角⇔半角変換について
- Normalizerの実行結果のサンプルが置いてある
ICU4J
じゃあNomalizerの変わりに使えるものはというと、ICU4Jというライブラリがある。
Javaの文字変換ライブラリICU4Jを使ってみよう
大文字小文字の変換は公式ドキュメント>Transforms>Case Mappingsのあたりが対応すると思われる。
Case Mappings
Case mapping is used to handle mappings of upper- and lower-case characters from one language to another language, and writing systems that use letters of the same alphabet to handle titlecase mappings that are particular to some class. They provide for certain language-specific mappings as well.
(DeepL訳)
大文字と小文字のマッピングは、ある言語から別の言語への大文字と小文字のマッピングを処理するために使用され、同じアルファベットの文字を使用するライティングシステムは、あるクラスに固有のタイトルケースマッピングを処理するために使用されます。大文字と小文字のマッピングは、ある言語固有のマッピングにも対応しています。
ICUとは?
公式ドキュメント
Github