IEのダウンロードファイル名に日本語を使うと文字化けする

IEでファイルをダウンロードする場合、ファイル名に日本語を使用すると、文字化けや意図しないファイル名が表示されることがある。送信する HTTP ヘッダーに Content-Disposition を含めると、Microsoft Internet Explorer 5 以降のブラウザではファイルのダウンロード ダイアログ ボックスが開く。

HTTP ヘッダーの名前: ”Content-Disposition”

ヘッダーに追加する文字列: ”attachment; filename=日本語のファイル”

IEは日本語の部分を勝手にシフトJISと決め打ちで処理してしまい文字化けする。
では、どうすればいいのか?と云うと、サーバーサイドのJAVAで UrlEncode(“日本語”,”SHIFT_JIS”)でエンコードしてしまえばいい。
よくあることだがサーバーサイドのJAVAが馬鹿で、クライアントでエンコードしたい場合もあるだろう。(ありすぎだが・・・)
しかし、”あいうえお”を”%82%A0%82%A2%82%A4%82%A6%82%A8”にエンコードできても、そもそもお馬鹿なサーバーサイドJAVAはエンコードされてるから自動的に”あいうえお”に戻してしまう。
では、2度エンコードするとどうなるだろうか?
やっと、”%82%A0%82%A2%82%A4%82%A6%82%A8”がサーバーサイドJAVAに届くが、今度はそのままHTTPヘッダーに追加してくれるので、ダイアログには”%82%A0%82%A2%82%A4%82%A6%82%A8”と表示してくれるので、クラウアントでどう足掻こうと無駄である。
 
と諦めが付いたところで、
HTMLのコードページをSHIFT_JISにすると、JavaScriptで処理する文字列のコードページもSHIFT_JISになるのだろうか?調べてみた。
————————–
<!DOCTYPE html>
<!–[if IE 8]>
<html xmlns=”http://www.w3.org/1999/xhtml”  dir=”ltr” lang=”ja”>
<![endif]–>
<!–[if !(IE 8) ]><!–>
<html xmlns=”http://www.w3.org/1999/xhtml”  dir=”ltr” lang=”ja”>
<!–<![endif]–>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=shift_jis”>

<meta http-equiv=”Content-Type” content=”text/html; charset=euc-jp”>

<meta http-equiv=”Content-Type” content=”text/html; charset=iso-2022-jp”>
<script>
function aaa() {
var aaa = document.frm.a1.value;
document.frm.a2.value = escape(aaa);
document.frm.a3.value = encodeURI(aaa);
}
</script>
</head>
<body>
<form name=”frm” >
オリジナル<input type=”text” name=”a1″ size=”100″ ><br>
escape<input type=”text” name=”a2″ size=”100″ ><br>
encodeURI<input type=”text” name=”a3″ size=”100″><br>
<input type=”button” value=”変換” onclick=”aaa()”>
</form>
</body>
</html>
———————————-
で(IE9)試してみると、Content-Typeで何を指定しても
あいうえお は
%u3042%u3044%u3046%u3048%u304A
%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A
そうJavaScriptのencodeURIは、常にUTF-8の文字コードをエンコードした結果になるのだ。
ps.
どうしても、シフトJISに変換したい場合は
http://ssiscirine.perma.jp/archives/20920
を参考にUTF-8の文字コードをSJISの文字コードに変換するしかないと思う。




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA