- 締切済み
Javaでの機種依存文字とWAVE DASH他の文字化け回避
Javaを使用して開発を行っていますが、 Oracle 9i DB(文字コードEUC) <=> JDBC <=> JSP の流れの中で文字化けが発生しています。 JSPでの charset=Windows-31J 、ファイルを読み込むときの エンコーディングもWindows-31Jにしています。 具体的に文字化けするのは、 (1)(1)(○の中に数字) I(ローマ数字)のような機種依存文字 (2)~(WAVE DASH) ∥(DOUBLE VERTICAL LINE)など です。 上記環境で文字化けを完全回避するに当たってですが、 (a)(1)に関しては、Oracleの文字コードをEUCではなくUTF-8にしないと だめでしょうか?EUCでは回避は無理でしょうか? JA16SJISTILDEでも大丈夫でしょうか? (b)どうすれば防げるでしょうか? Oracleの文字コードをJA16SJISTILDEにすれば大丈夫でしょうか? (c)他に文字化けに関して良い回避策・注意点があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- bgbg
- ベストアンサー率53% (94/175)
(1)ですが、Java側で正常にUnicode<=>EUC変換できる文字であれば大丈夫でしょう。 どの文字ができてどの文字ができないかは実際に実験して確かめてみた方が良いと思います。
- bgbg
- ベストアンサー率53% (94/175)
これは、Java内部のUnicodeマッピングとOracle(JDBC)上でのUnicodeマッピングが違うという、あんまりな理由で起こります。 以下のURLに概要が書かれています。 http://otndnld.oracle.co.jp/tech/java/htdocs/javanls/javanls817.html http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cgi?communityid=otn-697019&bbsid=1&no=6890&view=8 回避策としては、 ・文字化けする可能性がある機種依存文字を使用させない ・DB(JDBCドライバ)に文字コード変換をさせない (データ書き込みはJava側でコード変換してから、読み込みはバイト配列で取得してからJava側でコード変換) などが考えられると思います。
補足
bgbgさんご回答ありがとうございます。 ・DB(JDBCドライバ)に文字コード変換をさせない で回避できるのは (2)~(WAVE DASH) ∥(DOUBLE VERTICAL LINE)など で (1)(1)(○の中に数字) I(ローマ数字)のような機種依存文字 は回避できないということであっていますか? Oracleの文字コードがEUCでなくても(1)は解決できないのでしょうか?