内容摘要 -
弹出的保存或打开对话框里的文件名是乱码。
解决如下,中文文件名需要编码:
全文 -
ASP.NET编程下载,下载对话框里的文件名显示乱码的解决办法
如下的代码:
Response.Clear();
Response.ContentType = "application/msword";
Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + doc.FileName + "\"");
Response.BinaryWrite(doc.DownloadFile(original));
Response.End();
弹出的保存或打开对话框里的文件名是乱码。
解决如下,中文文件名需要编码:
Response.ContentType="application/ms-word";
String filename = Request.Params["filename"];
//中文文件名需要编码
Response.AddHeader( "content-disposition","attachment; filename="+HttpUtility.UrlEncode(filename,Encoding.UTF8 ) );
ASP.NET直接下载一个文件,而不是在IE中打开它,使用如下代码:
FileStream fileStream=new FileStream("C:\\doc\\test.doc",FileMode.Open);
long fileSize = fileStream.Length;
Context.Response.ContentType="application/octet-stream";
Context.Response.AddHeader("Content-Disposition","attachment; filename=\"" + HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + "\"");
Context.Response.AddHeader("Content-Length",fileSize.ToString());
byte[] fileBuffer=new byte[fileSize];
fileStream.Read(fileBuffer, 0, (int)fileSize);
fileStream.Close();
Context.Response.BinaryWrite(fileBuffer);
Context.Response.End();
ASP.NET直接下载一个文件,而不是在IE中打开它:
private void Button1_Click(object sender, System.EventArgs e)
{
try
{
string str = "<html>";
for(int page=0; page<4; page++)
{
str += "<TABLE borderColor='black' cellSpacing='0' borderColorDark='white' cellPadding='3' border='1'>";
str += "<tr><th>描述</th></tr>";
for(int i=1; i< 10; i++)
{
str =str + "<tr><td>测试" + i.ToString() + "</td></tr>";
}
str +="</table>";
//.doc 换页
str +="<br clear=all style='mso-special-character:line-break;page-break-before:always'>";
}
str += "</html>";
byte[] buff = System.Text.Encoding.Unicode.GetBytes(str);
//byte[] buff = System.Text.Encoding.UTF8.GetBytes(str);
byte[] outBuff = new byte[buff.Length + 2];
// 使用文件流方式写入UniCode编码的doc文件。
byte[] mark = {0xFF,0xFE} ;
outBuff[0] = mark[0];
outBuff[1] = mark[1];
for(int i=0; i< buff.Length; i++)
{
outBuff[i+2] = buff[i];
}
Context.Response.ContentType="application/octet-stream";
string fileName = "测试.doc";
Context.Response.AddHeader("Content-Disposition","attachment; filename=\"" + HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + "\"");
Context.Response.AddHeader("Content-Length",outBuff.Length.ToString());
Response.BufferOutput = true;
Response.Clear();
Context.Response.BinaryWrite(outBuff);
Context.Response.End();
}
catch(Exception ex)
{
ex.ToString();
}
finally
{
}
}
|