当设置下载的文件名包含中文时,按照普通的方式会造成下载页面文件名乱码的问题。
可以通过如下语句轻松解决这个问题:
string fileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(downloadName));
这样可以有效解决中文乱码的问题,贴出整套代码如下:
/// <summary>
/// 下载操作
/// </summary>
/// <param name="filePath">文件的完整路径</param>
/// <param name="downloadName">下载文件名</param>
private void DownloadFile(string filePath, string downloadName)
{
string fileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(downloadName));
FileInfo targetFile = new FileInfo(filePath);
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.Buffer = true;
System.Web.HttpContext.Current.Response.Charset = "utf-8"; //设置了类型为中文防止乱码的出现
System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName); //定义输出文件和文件名
System.Web.HttpContext.Current.Response.AppendHeader("Content-Length", targetFile.Length.ToString());
System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
System.Web.HttpContext.Current.Response.WriteFile(targetFile.FullName);
System.Web.HttpContext.Current.Response.End();
}
但是这种编码方式也存在缺点,就是空格符会被编码为“+”号,其他缺点暂时还没有发现。
路过大虾若有更好方法,还请不吝赐教!