Content-Disposition

とあるサイトのダウンロード処理を実装している。
この様な処理では、以下の様に Content-Disposition ヘッダを送信する。

Content-Disposition: attachment; filename="hogehoge.pdf"

ダウンロードを強制せずに、ダウンロード時のファイル名を予約するだけなら、 "attachment" のところを "inline" に変える。
とまぁ、ここまでは特別悩むこともない。言ってみれば基本だ。

問題は、ファイル名が日本語の場合。
RFC2183によれば、メールヘッダ同様、"B"エンコードするのが正しいらしい。だが、RFC通り解釈するUAはとても少ない。

FireFox: RFC通り。 ※Win/Mac共
InternetExplorer: ファイル名をShiftJISにエンコードする必要あり。 ※Win/Mac共
Safari: 色々試したが、とにかく文字化けする。
Opera: UTF-8にエンコードすると良いらしい。 ※手元にない為未確認

もう惨憺たる状況。なんと、FireFox以外全滅。
それでもまぁ、何かしらのエンコードで送信すれば文字化けしないのなら、まだいい。UAごとに異なるContent-Dispositionヘッダを送信することは、それほど難しいことじゃないから。
問題は、ぼくのメインブラウザでもあるSafari。色々試してみたが、文字化けしないエンコード方法が見つけられない。

解決のメドが立たないから、Safariに対してはRFC通り、"B"エンコードしたファイル名を送信することにした。
適切なファイル名はユーザーに入力してもらえばいいんだし、RFCを守ってないSafariが悪いんだし。(その意味では、FireFox以外のUAも全て同罪だけど)
良い方法が見つかったら対応しますんで、ということで。

トラックバック

以前取り上げた、日本語ファイル名を含んだContent-Dispositionを、Safariが正しく解釈出来ない件。解決の糸口が見つかりそう。 ...

コメント


コメントはすぐには反映しません。
ほぼ毎日チェックしていますが、翌日以降の反映となることもあります。

Twitter