トップ回答者
HTTP Download時の2バイト文字の文字化けについて

質問
-
ASP.NET C# で掲示板を作成しようとしており、添付ファイルをUploadした後、Downloadするページを作成しております。
HyperLink コントロールの NavigationURL に
以下のような関数をもったページを作り Redirect をしています。IE6.0 でDownloadすると、[開く][保存][キャンセル]ダイアログが開いて、
[保存]は問題ないのですが、開くを選択すると日本語が文字化けしてしまいます。
URLエンコードした文字列のようですてすと.ppt
↓
%e3%81%a6%e3%81%99%e3%81%a8[1].ppt
同様の問題がGotDotNet にもあがっておりますがhttp://www.gdncom.jp/general/mllog/tech/techDetail.aspx?ID=954
彼の場合は[保存]と[開く] の動作が同一のようです。
すべてをutf-8 に統一しようとやってみましたが、うまくいきません。
(もちろん shift-jis もやってみましたが同じでした。)ソースコード以外のところに原因があるような気がします。
(IE6.0の設定とか)
もし、お分かりの方がいらっしゃいましたらご教示願います。
環境
Download.aspx<%@ Page Language="C#" ResponseEncoding="utf-8" .... %>
// ファイル名検索ロジックは省略
// sfname:実際のファイルパス名
// ufname:表示上の名前
public void ExecFileDown(string sfname, string ufname)
{System.Text.Encoding.GetEncoding("utf-8");
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(ufname));Response.WriteFile(sfname);
Response.Flush();
Response.End();}
--------------
Web.confog
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" culture="ja-JP" uiCulture="ja-JP" />--------------
IE6.0 のオプション
■常にUTF-8としてURLを送信する (チェック済み)
回答
-
Content-Dispositionには,UrlEncodeではなく,RFC 2231に定められた方法でエンコードしたものを設定しなければなりません。
KB 436616 : [PRB] AddHeader, AppendHeader で日本語ファイル名が文字化けする
http://support.microsoft.com/kb/436616/
などが参考になるかと思います。- 回答としてマーク shojiro matsuhiro 2012年12月4日 3:07
すべての返信
-
Content-Dispositionには,UrlEncodeではなく,RFC 2231に定められた方法でエンコードしたものを設定しなければなりません。
KB 436616 : [PRB] AddHeader, AppendHeader で日本語ファイル名が文字化けする
http://support.microsoft.com/kb/436616/
などが参考になるかと思います。- 回答としてマーク shojiro matsuhiro 2012年12月4日 3:07