モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

JSPで文字コードを変換して出力

JSPで動いているWebアプリケーションで、普段は普通にHTMLで表を表示するのだけど、その表をCSVでも取得できるようにしてそのままExcelで読み込ませたい、という要件がありました。
そのため、HTMLはUTF-8で表示するが、CSVShift_JISで出力させる必要が出ました。


JSPShift_JISでの表示を行う場合、自分はPerlcgi書くときと同じで、UTF-8の文字列をShift_JISに変換し、それをcontentTypeも合わせてShift_JISを指定してやる必要があるのだと考えていました。

なので

byte[] sjis = str.getBytes("Shift_JIS");

とかやってShift_JISのバイト列を得て、それを表示させようとしていたのですが、どうしてもコード列っぽいのしかでない… となっていました。


が、実はJSPだとcontentTypeの指定を変更してやると、その指定に合わせて出力文字コードを自動的に変換してくれるのですね。


なのでJSPで望みの文字コードで出力するためには

<%@ page contentType="text/csv; charset=Shift_JIS" %>

とページディレクティブで指定するか、動的に指定したい場合には

response.setContentType("text/csv; charset=Shift_JIS");

とresponseで指定してやります。


わかってしまえばすごくシンプルで簡単なんだけど、他の言語の知識で「変換が必要」と思い込んでるとハマる、というお話でした。


(追記)

ファイルとしてダウンロードさせたい場合には、contentTypeの指定を「text/csv」ではなく「application/octet-stream」にしておくと、ファイルダウンロードのダイアログが出てくる。