Open2

(Kotlin)Unicode正規化による半角全角変換について

ふじしろふじしろ

java.text.Normalizer

kotlinで半角全角を変換する方法を探すと、java.text.Normalizerを使う手法が見つかる。

java.text.Normalizerはjavaの標準ライブラリだが、全角半角を変換するライブラリではなく、Unicodeの正規化を目的としているライブラリ。

ざっくり「全角半角などの表記揺れを統一する」目的で使うもので、文字種に応じて挙動が変わる。
例えば以下のような感じ。

  • 日本語のカタカナは全角で統一
  • 英数字は半角で統一

なので半角全角変換用途で使うと痛い目を見る。

参考:

ふじしろふじしろ

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とは?
https://icu.unicode.org/

公式ドキュメント
https://unicode-org.github.io/icu/

Github
https://github.com/unicode-org/icu?tab=readme-ov-file