今更だけどJIS X 0213:2004

先ず、JavaのバージョンとUnicodeのバージョンの対応は、下記のようになっています。

J2SE 1.4.x Unicode 3.0
JavaSE 5/6 Unicode 4.0

そして、JIS X 0213:2004に正式対応したUnicodeのバージョンは確か3.2だったはずなので、JavaSE 5以降であれば、JIS X 0213:2004で規格化された文字が扱えると言うことになります。
これは即ち、WLS8.1では対応できないけど、WLS9.x/10であれば対応できると言っても良いかもしれません。


「ん?ちょっと待てよ?」
と思った人は正解。
対応“している”ではなく対応“できる”なのです。
Javaのchar型がJ2SE1.4.2までは、「1文字=char型配列1つ分」「char型配列1つ分=1コードポイント」だったのが、JavaSE 5以降は、「1文字=char型配列1つ又は2つ分」「char型配列1つ分=1コード単位」となっています。
・・・・・はい、何言っているのかわかりませんね。(;^_^A アセアセ…
要は、J2SE1.4.2までとJavaSE 5以降では、char型の概念自体が変更になっているのですね。
・・・・・といっても、よくわかりませんよねぃ。フキフキ ""A^^;
Javaの内部の(char配列、StringクラスおよびStringBufferクラスで利用されている)文字エンコーディング方式は、UTF-16です。
そして、昔のUnicodeは世界中の文字が16bitで表現できると考えていたから、Javaでも「1文字=char型配列1つ分」という考え方でよかったんですが、実は16bitで表現できないことがわかったので、「さぁ困ったぞ」となってしまって、JSR204で検討された結果として、簡単に言うと「16bitで表現できない文字は、char型配列二つ分で表現してしまおう」となったのです。*1
つまり、Javaの仕様としては対応“できて”いるのですが、対応“する”ためには、上記のような概念の変更をJavaアプリケーション側で対処する必要があるというわけです。
具体的かどうかはわからないけど例を挙げると、
Stringクラスには文字数をカウントするメソッド(関数)を使って文字数をカウントして文字数制限を行っている場合には、補助文字は1文字ではなく2文字でカウントされるので、実際の文字数とアプリケーション内でカウントされた文字数に相違が発生する可能性があるため、補助文字の出現回数をカウントし、全体の文字数から減算する処理を別途実装する、
などの対処が必要になるということです。


即ち、WLS9.x/10はただのJavaアプリケーションを動かすJava上で動くプログラム*2なので、JIS X 0213:2004に対応しているかどうかは、Javaアプリケーションに依存すると言うことになります。




・・・と、ここで終わるとを書いて終わることになるので続けますw


JIS X 0213:2004では、「ト」と「゜」を結合した文字などもありますが、結合などの正規化処理はJavaSE 6から実装されているので、現時点で、WLS9.x/10では結合文字は取り扱うことが出来ません。*3
正確には
『それぞれ別の文字として扱われ、それらのコードポイントに文字が割り当てられていれば、別々に表示も行える』
という事になります。




以上、結合文字を使う事が想定される場合は、BEA WebLogic 9.x/10は利用できませんので、ご注意ください。
尚、“Sun Java System Application Server 9.1”はJavaSE6に対応している様ですね。*4

*1:あくまで簡単に言うとであって、16bitで表現できない文字を「補助文字」と定義し、char値のペアで表現し、1文字をそれぞれ上位下位の値(サロゲート)に分割して、それらの値が16bitで表現できる領域には文字が割り当てられない等の決まり事がある

*2:WLSもJavaアプリケーションだけど、敢えてココではプログラムと記載

*3:JavaSE6のJVM上での動作をサポートしていないから

*4:BEAも10.1とかで対応したりしてw