情景:
瀏覽器中點擊下載文件有兩個選項:[打開][下載] [打開]之后,提示["文件.xlsx"的文件格式和擴展名不匹配。文件可能已損壞或不安全。除非您信任其來源,否則請勿打開。是否仍要打開它?],點擊[是],看到Excel亂碼.. [下載]之后,再打開,會提示[發現"文件.xlsx"中的部分內容有問題。是否讓我們盡量嘗試恢復?如果您信任工作簿的源,請單擊"是"] 擴展:工作簿的"源",是將"文件.xlsx",改后綴為"文件.zip"然后看到里面的xml(sharedStrings.xml) ?
x
原來代碼以及下載情景:
byte[] streamData = getByte("file.xlsx"); Response.Charset = "UTF-8"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8"); Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", string.Format("attachment,filename={0}", out_file_name)); Response.AddHeader("Content-Length", streamData.LongLength.ToString()); Response.BinaryWrite(streamData); Response.Flush(); Response.End();
更改后代碼及情景:
Response.Charset = "UTF-8"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8"); Response.ContentType = "application/octet-stream";//改動 Response.AddHeader("Content-Disposition", string.Format("attachment,filename={0}", out_file_name)); Response.AddHeader("Content-Length", streamData.LongLength.ToString()); Response.BinaryWrite(streamData); Response.Flush(); Response.End();
小結:
x
本地Excel版本是2016
x
可能,Excel2007的版本不存在這個問題吧...
x
猜測:本地安裝的Excel版本和生成的Excel版本不同,下載到本地之后,本地可以修復打開不亂碼,但是直接打開不會修復,就亂碼了...