網友帆問了一個好問題: 他提到用Response.AddHeader("content-disposition", "attachment;filename=" & HttpUtility.UrlEncode(filename))的方式指定下載檔名稱,會發生另存新檔(Save)時可存成中文檔名,但如果選擇開啟(Open),直接用Excel等程式開啟時,檔名會呈現%e4%b8...這種UrlEncode的形式。
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "application/octet-stream";
Response.HeaderEncoding =
System.Text.Encoding.GetEncoding("big5");
Response.AddHeader("content-disposition",
"attachment;filename=中文檔名.xls");
//實際上多會從DB讀取byte[]再BinaryWrite, 示範起見,
//這裡用WriteFile混過去
Response.WriteFile(Server.MapPath("中文檔名.xls"));
Response.End();
}
原來HeaderEncoding是可以設定的,只要設成BIG5,就可以直接在Header中寫入中文字串,很簡單吧?但我測試的結果,HeaderEncoding設成UTF8會導致存檔或開啟都變成CAUZ97JK這種類似Temp的檔案名。那如果檔名有Unicode難字怎麼辦? 我目前打算繼續把頭再埋進沙裡,請User不要故意在檔名取難字煩我,變成問號的話自行負責。