displaytagにてExportオプションがありまして、これでxml, csv, excel形式のファイル出力ができるのですが、あちらの方が作ったためか、日本語などの文字に対応していませんでした。正確に言うと、文字コード変換などしないということです。
自分が実装した文字コード環境はJSPはEUC-JPで表示させているのですが、Excelでダウンロードするともちろん文字化けします。そりゃそうですよね、WindowsはShift_JISですから。
で、何をしたかというと、displaytagのソースをいじりました。具体的にはdisplaytagのTableTag.javaで、この中のwriteExportメソッドを修正しました。
writeExport内でJspWriterで出力しているのですが、これを引数として渡されているHttpServletResponse#getOutputStreamで出力するようにしました。もちろんPrintWriterで文字コード指定してストリームを生成していますが。あと、勝手にタグ属性を追加して、出力文字コードと入力文字コードを指定できるようにしました。下記がその修正した箇所です。
1126 try
1127 {
1128 if (this.exportEncoding == null)
1129 this.exportEncoding = "Shift_JIS";
1130 if (this.originalEncoding == null)
1131 this.originalEncoding = "EUC-JP";
1132 PrintWriter writer = new PrintWriter(
1133 new OutputStreamWriter(response.getOutputStream(),
1134 this.exportEncoding));
1135 writer.write(
1136 new String(exportString.getBytes(this.originalEncoding)));
1137 writer.flush();
1138 /*
1139 out.write(exportString);
1140 out.flush();
1141 */
1142 }
1143 catch (IOException e)
いっそのことdisplaytagに投稿しようかと思っていますが、勇気がないし英語読み書きできないので保留状態です。それに本当にこれでいいのかわかりませんし...
