天天看點

ASP.NET 導出檔案,解決檔案名亂碼方法

/// <param name="fileName">檔案名稱,不含字尾</param>
/// <param name="ext">檔案擴充名,預設為xls</param>
/// <param name="createTime">檔案名追加年月日時分秒,預設true</param>
EncodeFielName("曆史資料","xls",true)

結果:曆史資料20210507161134.xls      
#region 導出檔案,中文檔案名轉碼
        /// <summary>
        /// 導出檔案,中文檔案名轉碼
        /// </summary>
        /// <param name="fileName">檔案名稱,不含字尾</param>
        /// <param name="ext">檔案擴充名,預設為xls</param>
        /// <param name="createTime">檔案名追加年月日時分秒,預設true</param>
        /// <returns></returns>
        public string EncodeFielName(string fileName, string ext = "xls", bool createTime = true)
        {
            // 追加年月日時分秒
            if (createTime)
            {
                fileName = fileName + DateTime.Now.ToString("yyyyMMddHHmmss");
            }

            System.Web.HttpContext curContext = System.Web.HttpContext.Current;
            string outputFileName = null;
            string browser = curContext.Request.UserAgent.ToUpper();
            if (browser.Contains("MS") == true && browser.Contains("IE") == true)
            {
                outputFileName = System.Web.HttpUtility.UrlEncode(fileName);
            }
            else if (browser.Contains("FIREFOX") == true)
            {
                outputFileName = "\"" + fileName + "\"";
            }
            else
            {
                outputFileName = System.Web.HttpUtility.UrlEncode(fileName);
            }

            // 追加字尾名
            if (!string.IsNullOrWhiteSpace(ext))
            {
                outputFileName = outputFileName + "." + ext;
            }

            return outputFileName;
        } 
        #endregion