U+0000 - U+FFFF までをJavaで表記する方法
以下の方法で、表現可能
char c = '\u0000';
...
char c = '\uFFFF';
例えば、すべての文字列を格納した文字列を作成した場合、以下のようにすれば良い
StringBuilder str = new StringBuilder();
for (char c = '\u0000'; c < '\uFFFF'; ++c) {
str.append(c);
}
正規化ルールのサンプル
サンプルプログラム
String inputStr="№,㈱,㍻";
String outpuStr = Normalizer.normalize(inputStr,Normalizer.NFKC);
System.out.println("入力文字列:"+inputStr);
System.out.println("文字列長:"+inputStr.length());
System.out.println("-----");
System.out.println("出力文字列:"+outpuStr);
System.out.println("文字列長:"+outpuStr.length());
実行結果
入力文字列:№,㈱,㍻
文字列長:5
-
-
-
- -
-
-
出力文字列:No,(株),平成
文字列長:9
正規化のモード
Unicode正規化には、以下の4つのモードがある
- NFC
- NFD
- NFKC
- NFKD
検索エンジンで使用する場合は、"NFKC"を使用することが一般的。
これは、検索漏れを起こさず、できるだけ高速に検索実施させたいためである。
検索速度より向上させるために
Unicodeでは、”ガ”という文字は、以下の2通りで表現可能
- 平仮名か+濁点(合成可能)という2文字
→NFD,NFKD
- 濁点付き平仮名かという1文字
→NFC,NFKC
できるだけ短くした方が良いため、後者の方がよい
検索漏れをなくす
"№"などのような特殊文字として、1文字で表現できます。
しかし、検索時には"№"という1文字でも、"No"という半角2文字でもヒットしてほしい。
そのため、これを満たす正規化は、NFKDとNKDCである。
ちなみに、有名な特殊文字は他にも㍻、㈱がある。
上記の2つの理由より、検索エンジンで使用される正規化ルールは、NFKCが一般的である。
参考:http://http://homepage1.nifty.com/nomenclator/unicode/normalization.htm