下载时文件名乱码的问题

当设置下载的文件名包含中文时,按照普通的方式会造成下载页面文件名乱码的问题。

可以通过如下语句轻松解决这个问题:

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();
}

但是这种编码方式也存在缺点,就是空格符会被编码为“+”号,其他缺点暂时还没有发现。

路过大虾若有更好方法,还请不吝赐教!

你可能感兴趣的:(乱码)