- ベストアンサー
文字化けについての質問
こんにちは、kmakotoです。 現在日本語の文字化けに悩まされています。 いろいろなサイトで情報を見たのですが、 該当するようなものがありませんでした。 皆さんの力をお借りしたく投稿しました。 環境は、 サーバ:Windows2000(SJIS、DB:oracle 8.1.6(SJIS) で weblogic7.0 を使って、Servlet,JSP,EJB の開発をしています。 文字化けの内容はDBで検索した結果を response.getWriterで printをつかってCSV形式にして、それをダウンロードしようとしているのですが、 エディタもしくはExcelで開いたとき日本語が化けて表示されてしまいます。 SJIS、MS932が…とかの説明がweb上にあるので、試行錯誤してみました。 しかし日本語は化けて表示されてしまいます。 試したことは 1.Javacのコンパイルオプションに -encodingにSJISまたはMS932を指定してコンパイル 2.1:response.setContentType("application/octet-stream"); 2:response.setHeader("Content-Disposition", "attachment;filename=\"" + new String(downLoadFileName.getBytes("MS932"), "8859_1") + "\""); 文字コードの指定の部分にMS932やSJISを設定 上記のことを試したのですがCSVファイルが文字化けしてしまいます。 2.1:の部分をresponse.setContentType("text/html");するとブラウザ上に表示されるのですが このときだけはちゃんと日本語で表示してくれます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
文字として流してるからダメなんだと思います。 HTTPでは日本語は %A4%A2%A4%A4%A4%A6%A4%A8%A4%AA (あいうえお) みたいにエンコードされて転送されるので、 受け取るのがブラウザならそれでいいのですが(ブラウザが元に戻してくれる) そうじゃないのであれば、 res.setContentType("application/octed-stream"); res.setHeader("Content-Disposition", ...略) OutputStream out = res.getOutputStream(); // で、out にそのままバイナリを書き出す とすべきだと思います。
その他の回答 (2)
- akinori_s
- ベストアンサー率60% (21/35)
うまくいくか分かりませんが... 方法1. response.setContentType("application/octet-stream;charset=Shift_JIS"); 方法2. OutputStream os = response.getOutputStream(); PrintWriter out = new PrintWriter(new OutputStreamWriter(os,"Shift_JIS")); どちらか、もしくは両方でやって見てください。
お礼
お返事ありがとうございました。 akinori_sさんの方法とバイナリで書き込む方法を あわせて行うと、無事日本語が文字化けせずに CSVファイルを取得することができました。
- Harry_
- ベストアンサー率55% (36/65)
いっそバイナリで流したらどうですか。 getOutputStream して。
お礼
お返事ありがとうございます。 バイナリで書き出すと日本語が文字化けせずに CSVファイルを取得することができました。 でも今まででバイナリで書き出しを行わなくても 文字化けはしなかったのですが、(以前はWeblogic5.1) Weblogic7.0にすると今回の文字化けがでてしまいました。
お礼
お返事ありがとうございました。 Harry_さんの上記のサンプルコードを使って バイナリで書き出すと文字化けせずに CSVファイルを作ることができました。