ファイルダウンロード処理において、レスポンスヘッダー Content-Disposition に attachment; filename= に日本語を設定すると文字化けする
いろいろと回避方法があるようだが
Safariに関してはこの方法では文字化けは不可避らしい…
う〜ん困った…
回避方法
ブラウザ | 対応 |
---|---|
IE6,7,8 | URLエンコーディングで回避できる(java.net.URLEncoder#encode() を使用する) |
FireFox3.5 | MIME-Bエンコーディングで回避できる(javax.mail.MimeUtility#encodeWord() を使用する) |
Chrome4.0 | [FireFox]と同じ |
Safari | どう足掻いても化けるので、サニタイジングを行うなどの処理が必要 |
実装
このような条件でファイル名を変換
User-Agentの条件をもっと細かく見る必要があるかもしれない(?)
// User-Agent取得 String agent = request.getHeader("User-Agent").toUpperCase(); if(agent.indexOf("MSIE") > -1) { // Internet Explorer fileName = URLEncoder.encode(fileName, "UTF-8"); } else if(agent.indexOf("FIREFOX") > -1 || agent.indexOf("CHROME") > -1){ // FireFox, Google Chrome fileName = MimeUtility.encodeWord(fileName, "ISO-2022-JP", "B"); } else if(agent.indexOf("SAFARI") > -1) { // Safari // 日本語(例えばASCII文字以外)をサニタイズする処理を挟む fileName = sanitizeForSafari(fileName); } else { // その他 } return fileName;
参照サイト
Safariの文字化けを回避する対応が載っているリンクを貼っておきます
日本語ファイル名の書き出し(Safari対策) - Chewing GUM! - Seesaa Wiki(ウィキ)
日本語ファイル名
いずれもリクエストパラメータを変更する必要があるっぽい
これを参考に、リダイレクトすればそれっぽくできそうだけど?
それにはサーバ側の口も必要なワケで…
う〜ん…まいった…