dポイントプレゼントキャンペーン実施中!

ファイルをダウンロードする際に、ファイルを読み込み、
ServletOutputStreamに書き込んでいます。
その際に、ダウンロードファイル名に2バイト文字が
大量に含まれていると、クライアントから要求したサーブレット名に
置き換わってしまいます。
また、記号を含む長い日本語ファイル名をダウンロードした場合は
一部の文字だけが別の文字に置き換わっている現象も
発生します。
ASCII文字のみで構成されたファイル名、
もしくは短い日本語ファイル名であれば問題はありません。

ヘッダへの設定は以下の様に行っています。

response.setContentType( "application/octet-stream" );
response.setHeader(
"Content-Disposition",
"attachment; filename=" +
java.net.URLEncoder.encode( downloadFileName, "UTF-8" ) );

Content-Dispositionに設定するファイル名を
UTF-8でURLEncoder.encodeしているのですが、
ログ出力すると、2バイト文字のみのファイル名であれば
25~26文字程度を超えた時点で、MIME変換後の文字長が
255文字を超過してしまい、リクエスト要求したサーブレット名に
置き換わってしまうように見受けられます。

いま作っているシステムはInternetExploler5.5SP2以降のIEで動作することが仕様となっています。

A 回答 (1件)

環境はApache+Tomcatでしょうか?



Tomcatのみの場合、ファイル名はSJISのバイナリーを送れば大丈夫だったと思います。Apacheを通した場合、Apacheとのコネクターで何やらコードの変換が行われるみたいでファイル名が化けるのでURLエンコードが必要みたいです。コネクターのソースを変更してリコンパイルすればいいのかもしれませんがやった事が無いので確かな事が言えません。

文字化けは、ファイルシステムのファイル名(EUC or SJIS)をStringにする時にUnicodeに変換できないで化けていると思われますUnicodeにする限り避けられないのではないでしょうか。

日本語ファイル名の取り扱い苦労しますよね。決定的な回答ができなくてすいません。お悩み共有と言うか参考程度に受け取って頂ければ思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!