
IE画面上にファイル名がリンク表示されており、
ファイル名のクリックで起動されるDownloadServletを作成しました。
日本語を含むファイル名のダウンロードを行うと、
「ファイルのダウンロード」ダイアログではファイル名がきちんと表示されるのですが、
「ファイルの保存」ダイアログでのファイル名が文字化けしてしまいます。
ダウンロード実施後のファイル名も文字化けのままです。
servletでのレスポンスヘッダの設定は以下のように行っています。
res.setContentType("application/octet-stream; charset=Shift_JIS");
res.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
現象が起きている環境はWindows2000Professional, IE6.0で、
WindowsXPなら問題ありませんでした。
例えば「通達.pdf」というファイル名だと、
”通達”という文字列が”騾夐#”と化けます。
多少調べてみたところURLEncoderではUTF-8コードを%+16進数文字に変換するので、
結果が以下のようになります。
%E9%80%9A%E9%81%94.PDF
これをデコード時?にまずUTF-8として読んで、
それからSJIS変換すれば?ちゃんと読めるのかと思うのですが、
どうも「%E9%80%9A%E9%81%94」をそのままSJISコードとしてデコードして
「騾(E980)夐(9AE9)#(8194)」となっている感じです。
ダウンロード処理で出すダイアログはIEに依存しているので
特にデコードなどを自分で行っているわけではないですし、
WindowsXPではちゃんと表示されるなど、
デコード方式がOSに依存?しているような気もするので対処の方法がわかりません。
ダウンロードservletのプログラムの中でどうにか対処できるものなのでしょうか?
わかりにくい質問ですみませんが、ぜひご回答よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
参考URLのページにあるとおり、Content-Dispositionヘッダは、Shift_JIS以外だと文字化けします。
迷惑な仕様ですね・・・。
私の場合は、User-Agentで判断して
res.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "MS932"));
として回避しています。
参考URL:http://support.microsoft.com/default.aspx?scid=k …
st2さん回答ありがとうございます。
本日はすでに自宅に帰ってきてしまっており、試験環境がないので確認できないのですが、解決できそうな糸口を教えていただけただけでも大変助かりました。
ぜひ試してみます。状況についてはまたお返事させて頂きますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Google Drive 【Googleドライブ】ドライブ上内でのフォルダ移行について 4 2022/11/30 12:50
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) 【VBA】PDF出力に任意のファイル名前を付ける方法 3 2023/07/21 10:55
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
csvをダウンロードする際、いき...
-
ファイルに書き込む時の負荷に...
-
FTP関数について
-
ダウンロードファイル名の文字...
-
PHPでファイルのダウンロード判...
-
PDF ダウンロード
-
CSVファイルをダウンロードで文...
-
ホームページにphpを入れたので...
-
ExcelとPHPについて・・・
-
連続投稿対策
-
cgi-binでPHP動作しない
-
モバイルサイトのxhtmlでPHPを...
-
FTPコマンドでディレクトリごと...
-
PHPのif文でその処理を途中で抜...
-
phpのrand関数は本当にランダム?
-
mingwにパスを通せたのですが、...
-
AS3外部テキスト読み込み
-
Permission denied in
-
PHPでPC版と携帯版のペー...
-
APIで出てきたXMLをPHPで表示さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
zip圧縮の種類について
-
PHPで複数ファイルのダウン...
-
PDF ダウンロード
-
ファイル一覧を表示しその画面...
-
phpでうまく画像がダウンロード...
-
ファイルのダウンロードが出来ない
-
libxml2のインストール
-
CSV出力時の”0”表示(電話番号...
-
ダウンロードファイル名の文字...
-
ftp_getでローカルにファイルが...
-
ファイルのダウンロードのイベ...
-
VB.NETのFTPダウンロードについて
-
PHPでダウンロードしたファイル...
-
複数ファイルを連続でダウンロード
-
PHPでファイルのダウンロードす...
-
PHPで複数ファイルをZIPで圧縮...
-
PHPでgz形式のファイルをダウン...
-
連続ダウンロードのエラー
-
CSVファイルのダウンロード
-
【PHP】ダウンロードサイト作成...
おすすめ情報