時代的には今更の感もある、Internet Explorer 6 での話。
Webサーバーからの応答ヘッダに、content-disposition: attachment; filename=~ を指定することで、Internet Explorer にダウンロードダイアログを表示させることができるのは周知のとおり。
ダウンロードダイアログには、"filename=~" で指定したファイル名が既定で表示される。
ここで、特に Internet Explorer が相手の場合は、"filename=~" に UTF-8 で URLエンコードした文字列を指定すれば、日本語文字列であっても期待通りに正しくダウンロードダイアログに既定のファイル名を表示させることができる。
ところで、である。
なんと、Internet Explorer 6 では、"filename=~" に日本語指定した場合、
たかだか 16 文字に刈り取られてしまうことが判明。
(これまで知らなかった...)
いろいろ調査した結果、どうやら IE6 では、"filename=~" に指定したファイル名文字列が 最大150文字までに収まるよう、先頭を刈り取ってしまうらしい。
まぁ、150文字もあればじゅうぶん、という気もするが、ここで日本語ファイル名を指定した場合がちょっとひっかかってくる。
先に書いたとおり、UTF-8 で URL エンコードした場合、日本語文字は1文字が "%12%32%56" のように9文字になってしまう。
どうやら IE6 は、この、エンコードされた文字列に対して、150文字に刈り取りするようなのだ。
計算としては、ファイル名長上限 150 を 9 で割ると、16.666... ということで、日本語文字だけだとたしかに 16 文字に刈り取られてしまうわけだ。
ちなみに、Internet Explorer 8 の場合はそこまでひどいことはなく、すべて日本語文字だけの場合でも、202 文字だけに刈り取られるだけで済んだ。
(それでも、最近の Windows OS が許しているファイル名最大長 250文字よりも短くはなっているようだが)
まぁ、そんなにまでして、ダウンロードファイル名の既定値に日本語使うことにこだわる必要があるのか? とか、今更 Internet Explorer 6 なのか? という指摘・議論もあるとは思うが、とりあえず。
※
Internet Explorer 6 は、Windows XP Pro SP3 上で動作確認。
Internet Explorer 8 は、Windows Vista Busioness SP2 上で動作確認。
また、上記で "日本語文字" と書いてあるが、これはようするに、UTF-8 でエンコードした際に2バイト以上でエンコードされる文字であれば日本語である必要はないし、さらに言えば、URLエンコードで "%~" にエンコードされる文字でも、刈り取られ問題が発生しうる、ということである。