パスワードを忘れた? アカウント作成
432265 journal

mumumuの日記: MS932 → EUC_JP via Java 1.4.2 1

日記 by mumumu

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を使うことなのだが(藁

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2006年04月10日 11時45分 (#918291)
    私の場合
    Oracle(MS932) → JDBC(Unicode)
    の変換の段階で特殊文字がすっとぶみたいなんですが
    何か対策はされていますか?

    OracleのJDBCドライバの仕様調べては見てるんですが
    DBにMS932で入っててもSJISでUnicodeに変換するのを
    回避できないみたいで・・・
typodupeerror

Stay hungry, Stay foolish. -- Steven Paul Jobs

読み込み中...