dポイントプレゼントキャンペーン実施中!

HTMLファイルのフォームのパラメータをサーブレットに引渡し、サーブレット内で、ファイルに出力(CSV形式)したいのですが、日本語が含まれていると文字化けしてしまいます。

文字化け防止の為に下記のようなコードを書いているのですが、うまくいきませんでした。(フォームの"name"というパラメータをサーブレットに渡します。)
-----------------------------------------------------
(サーブレットのファイルより一部抜粋)

//変数&定数の宣言
private static final String csvFile = "/home/csvFile.csv";
String name;


FileWriter fw = new FileWriter(csvFile);
PrintWriter pw = new PrintWriter(fw);

//☆文字化け防止コード
name = request.getParameter("name");
name = new String(name.getBytes("8859_1"),"SJIS");

//ファイルに出力
pw.print(name + ",");
pw.close();
-----------------------------------------------------

上記のようなコードの書き方だと駄目でしょうか?
ちなみに"SJIS"を"euc-jp"、"JisAutoDetect"に変えてもうまくいきませんでした。

実行方法は
(1).windowsでサーブレットをコンパイルし、
(2).(1)で出来たクラスファイルをLinuxに転送し、
(3).Linux上でTomcatの再起動をして実行しています。

もし何か分かることがありましたらご教授お願い致します。

A 回答 (3件)

WEBのフォームに入力される文字は通常base64エンコードされていますので、


base64デコードする必要があります。
漢字で「あいう」と入っている場合は、jisであれば82A082A282A4という16進コードであらわされます。これが「%82%A0%82%A2%82%A4」という文字列に変換されます。
これらのことは、考慮されていますか?
    • good
    • 0

PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileWriter(csvFile), "SJIS"));


にしてみたらどうでしょう?
"SJIS"の部分を"euc-jp"にすればEUCで書き込まれると思います。
    • good
    • 0

"8859_1"という、欧米向けのエンコーディングを経由しているのが


いけないのだと思います。

FileOutputStream fos = new FileOutputStream(csvFile);
OutputStreamWriter osw = new OutputStreamWriter(fos, "SJIS");

name = request.getParameter("name");
osw.write(name, 0, name.length());
osw.write(",", 0, 1);
osw.close();

ではどうでしょう。

上のoswを引数にしてPrintWriterのインスタンスを作る手もあります。
yuxpさんの回答に近くなりますが。(yuxpさんの回答自体は、
FileWriterを引数に取るOutputStreamWriterのコンストラクタはない
と思いますが。)

また、madmanさんの仰っているのはURLエンコーディングのことだと
思います。考慮しておくのは必要ですが、requestのクラスが書いて
いないので、とりあえず解決済みのこととして扱いました。
    • good
    • 0

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