mumumuの日記: MS932 → EUC_JP via Java 1.4.2 1
JavaのEUC_JPコンバータが所謂機種依存文字(ローマ数
字や丸文字)に対応できていなかったことは早くから知
られてきたところであり、JavaでWebアプリを作る者の
多くが悩まされてきたところである。
今回ローマ数字(U+2160~U+2179)をEUC_JPに変換
しようと試みていたのだが、Java 2 SDK 1.4.2_10
にて「eucjp-open(実質eucjp_Solarisのエイリアス)」
を指定するとやはり小文字のローマ数字の部分が壊れてし
まった。od(1)による以下のダンプを見ても見事に後半部
分が砕け散っているのがわかる(藁
----
※以下のデータは「ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅰⅱⅲⅳⅴ
ⅵⅶⅷⅸⅹ」という文字列を、Javaのeucjp-open
コンバータを用いて変換したものである。
0000000 b5ad b6ad b7ad b8ad b9ad baad bbad bcad
0000020 bdad bead f38f 8ff3 f4f3 f38f 8ff5 f6f3
0000040 f38f 8ff7 f8f3 f38f 8ff9 faf3 f38f 8ffb
0000060 fcf3
----
今回のデータが壊れる経路は以下のようになっている。
Oracle(MS932) → JDBC(Unicode) →
OutputStreamWriter(eucjp-open) → File(EUC_JP)
上記のOutputStreamWriterから書き込む部分で壊れて
しまっていることが今回わかっている。さてどうしてくれ
ようか(´ー`;) 勿論、自分でコンバータを全部書く余裕
などない。
----
最終手段はMS932(JavaではWindows-31Jのエイリアス)
でまんまファイルに書き込んでnkfを使うことなのだが(藁
hmm (スコア:0)
Oracle(MS932) → JDBC(Unicode)
の変換の段階で特殊文字がすっとぶみたいなんですが
何か対策はされていますか?
OracleのJDBCドライバの仕様調べては見てるんですが
DBにMS932で入っててもSJISでUnicodeに変換するのを
回避できないみたいで・・・