.net MVC 下载文件乱码问题解决方案

        public ActionResult OverAllSummaryExport(string id)
        {
            #region 解决中文乱码
            Response.HeaderEncoding = Encoding.UTF8;
            string fileName = "安全生产标准化自评结果整体输出.doc";
            if (Request.UserAgent != null)
            {
                string userAgent = Request.UserAgent.ToUpper();
                if (userAgent.IndexOf("FIREFOX", StringComparison.Ordinal) <= 0)
                    fileName = ToUtf8String(fileName);
            }
            #endregion
            string HTMLStr =string.Format("<html><head><meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">{0}</head><body>{1}</body></html>",GetStyle(),GetBody(id));
            return File(Encoding.UTF8.GetBytes(HTMLStr), "application/vnd.ms-word", fileName);
        }


        /// <summary> 
        /// 解决下载名称在IE下中文乱码 
        /// </summary> 
        /// <param name="s"></param> 
        /// <returns></returns> 
        private String ToUtf8String(String s)
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < s.Length; i++)
            {
                char c = s[i];
                if (c >= 0 && c <= 255)
                {
                    sb.Append(c);
                }
                else
                {
                    byte[] b;
                    try
                    {
                        b = Encoding.UTF8.GetBytes(c.ToString());
                    }
                    catch (Exception ex)
                    {
                        b = new byte[0];
                    }
                    for (int j = 0; j < b.Length; j++)
                    {
                        int k = b[j];
                        if (k < 0) k += 256;

                        sb.Append("%" + Convert.ToString(k, 16).ToUpper());
                    }
                }
            }
            return sb.ToString();
        }


这本是要输出一个word,但是太麻烦,所以打算用拼接html字符串,然后输出时文件后缀名为doc

其中文件名称的乱码和文件内容的乱码很纠结。


这段代码解决了下载名称的乱码问题。

火狐和chrome中没有此问题,就是IE浏览器下载时文件名乱码,所以判断了下浏览器类型。


你可能感兴趣的:(.net MVC 下载文件乱码问题解决方案)