- 締切済み
困ってます
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の再起動をして実行しています。 もし何か分かることがありましたらご教授お願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ranx
- ベストアンサー率24% (357/1463)
"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のクラスが書いて いないので、とりあえず解決済みのこととして扱いました。
- yuxp
- ベストアンサー率58% (7/12)
PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileWriter(csvFile), "SJIS")); にしてみたらどうでしょう? "SJIS"の部分を"euc-jp"にすればEUCで書き込まれると思います。
- madman
- ベストアンサー率24% (612/2465)
WEBのフォームに入力される文字は通常base64エンコードされていますので、 base64デコードする必要があります。 漢字で「あいう」と入っている場合は、jisであれば82A082A282A4という16進コードであらわされます。これが「%82%A0%82%A2%82%A4」という文字列に変換されます。 これらのことは、考慮されていますか?