IEでのファイルダウンロード文字化け問題
IEでファイルをダウンロードする時に文字化けが起きたので調査。
通常は、以下のようにURLエンコードしてあげれば問題ない。
String dFilename = URLEncode.encode(finename,"UTF-8"); response.setHeader("Content-Transfer-Encoding","binary"); response.setHeader("Content-Type","application/force-download;charset=UTF-8"); response.setHeader("Content-Disposition","attachment; filename=" + dFilename);
しかし、これだと一定以上の文字数でダウンロードダイアログで文字化けが発生。
原因は、文字数制限。
⇒
IEでは255バイトを超える文字は文字化けする仕様らしい。
しかも、UTF-8でのエンコードだと全角が6バイト9バイトに変わってしまうため、
文字数の制限が激しい。
さらに、HttpHeaderに何を設定してもIEはShift_JISエンコードされているものと
判断するらしい。
⇒
対応としては、IEでダウンロードさせる場合は、
Shift_JISでエンコードしてHttpHeaderに設定させてあげればOK。
String dFilename = new String(finename.getBytes("Windows-31J","ISO-8859-1"));
この場合、IE7の5C/7C問題に引っかかるが、すでにパッチがでているから最新を適用すれば大丈夫。
⇒IE7で、ダウンロード時に特定の文字が化ける - 倖せの迷う森
ただし、それ以前のIEだと、コロンやセミコロンなどの2バイト目が5C/7Cの文字が
ファイル名に含まれているとNG。
【参考】
負けるな!新人SEのノンストップ自己研鑽生活(Javaプログラマ&新人パパの子育て日記帳) ファイルダウンロード時の日本語ファイル名の文字化け
IEでファイルダウンロード時の文字化け - guccyonikki