電子書籍の厳選無料作品が豊富!

こんにちは、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");するとブラウザ上に表示されるのですが
このときだけはちゃんと日本語で表示してくれます。

A 回答 (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 にそのままバイナリを書き出す

とすべきだと思います。
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。
Harry_さんの上記のサンプルコードを使って
バイナリで書き出すと文字化けせずに
CSVファイルを作ることができました。

お礼日時:2002/08/19 09:05

うまくいくか分かりませんが...



方法1.
response.setContentType("application/octet-stream;charset=Shift_JIS");

方法2.
 OutputStream os = response.getOutputStream();
 PrintWriter out = new PrintWriter(new OutputStreamWriter(os,"Shift_JIS"));


どちらか、もしくは両方でやって見てください。
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。
akinori_sさんの方法とバイナリで書き込む方法を
あわせて行うと、無事日本語が文字化けせずに
CSVファイルを取得することができました。

お礼日時:2002/08/19 09:15

いっそバイナリで流したらどうですか。


getOutputStream して。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
バイナリで書き出すと日本語が文字化けせずに
CSVファイルを取得することができました。
でも今まででバイナリで書き出しを行わなくても
文字化けはしなかったのですが、(以前はWeblogic5.1)
Weblogic7.0にすると今回の文字化けがでてしまいました。

お礼日時:2002/08/19 09:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!