category: Java
DATE : 2006/12/25 (Mon)
DATE : 2006/12/25 (Mon)
Java SE 5 以前
ICU4J (International Components for Unicode for Java) ライブラリを使います。ICU は Unicode を処理するライブラリです。Unicode には異なるコードで表された同じ文字を特定のコードに統一する「Unicode 正規化」という仕様があります。ICU は、この仕様に基づいて文字コードを変換します。
Unicode 正規化を用いて全角英数や半角カナを変換するには、com.ibm.icu.text.Normalizer を使用します。target 変数に格納された String 型の文字列を変換するコードは、次のようになります。
String result = Normalizer.normalize(target, Normalizer.NFKC);
「Normalizer.NFKC」というのは、正規化の方法を表しています。「NF」は「正規化形式(Normalizer Form)」を表し、「KC」は「互換合成(Compatibility Composition)」を表しています。つまり、正規化の統一先の文字と互換性のある文字であれば正規化され、1文字分のコードが2つ以上に分かれている場合はコード1つになるように合成されます。そのため、全角英数は半角に、半角カナが全角に変換されるわけです。
Java SE 6 以降
java.text.Normalizer を使います。
上の例を java.text.Normalizer で書き直すと、次のようになります。
String result = Normalizer.normalize(target, Normalizer.Form.NFKC);
参考文献
- 続・ICU4J
- Java SE 6 じゃじゃ馬ならし「Unicode の正規化」
- Unicode 正規化
- 小形克宏の「文字の海、ビットの舟」特別編24「JIS X 0213の改正は、文字コードにどんな未来をもたらすか(7) 番外編:改正JIS X 0213とUnicodeの等価属性 / 正規化について(上)
PR
●この記事にコメントする
忍者ブログ [PR]