2006-12-15 [長年日記]
■JIS2004で追加になった文字をJavaで扱う
Java 関係ない人は、
の方をご覧下さい。
正しくは「JIS2004を受けてUnicodeに追加になった文字のうちの補助文字を扱う」だろう。
JIS2004 の Character Set を網羅したフォントが Windows Vista に搭載される(あとから XP 向けにも提供されるとあって検索もちらほら。
UTF-8/UTF-16 で4バイトに符号化される文字を Java で取り扱うための資料はというと……、
この辺か。
あとでテストしてみないといけないのだけど、Shift_JIS や EUC-JP で書かれたページのフォームに、該当の漢字を入れると実体参照(10進数の数値文字参照)の形でデータが来るみたいなので受け取る方(Servlet Engine)でどのようにあつかわれるかな〜、とか。
追記
「古い」Tomcatで実験。俦 (にんべんに寿)の文字をフォームのINPUT要素(type="text")から送る。パケットを見ると p=%26%2320454%3B というデータが送られてくる。これは結局Servletのパラメータとしては"俦"となる。
JDK5 より「後」のTomcatだとどうなっているのだろう……、という疑問は残る。
追記
"MS932"と"SJIS"などのコンバータで非互換があった文字、‖(ShiftJISで0x8161)絡みで問題が。
"SJIS"で読み込むと、U+2016(DOUBLE VERTICAL LINE)になる。
"MS932"で読み込むと、U+2225(PARALLEL TO)になる。
Vista 搭載のフォントで、U+2225 の字形が変更されている! メモ帳などでこの字を見ると、斜めに並んで見える!
実体参照で書く。‖→‖, ∥→∥。これを Vista で見ると字形が異なって見えるはず。
この斜め線のつもりでエンドユーザが‖を入力して Shift_JIS のファイルとして保存したとする。それをJava のプログラムに読み込ませる。この時にEUCとの変換などを考えて"SJIS"で読み込んだりすると……、と考えるとちょっと鬱。
追記
さすがにわけがわからないので、Firefoxの設定をメイリオフォントにしてスクリーンショットを取ってみた。
ん……?
Firefox って MS932 に従ってU+2225で見えてる?
このページ、Linux か Macin で表示して……って、メイリオフォントが無いからそれじゃ意味無いか。
じゃぁ、Safariだ。
U+2016 で表示してるな。