asp.net 解决下载文件–中文名乱码问题

最近的项目中需要导出Excel 表格,Excel名称是中文的,在IE中下载老是出现中文名称乱码问题,设置 Respone Encoding 无果,最后找到解决方案如下:


 

    public static string ToHexString(string s)
            {
                char[] chars = s.ToCharArray();
                StringBuilder builder = new StringBuilder();
               for (int index = 0; index < chars.Length; index++)
               {
                    bool needToEncode = NeedToEncode(chars[index]);
                    if (needToEncode)
                    {
                        string encodedString = ToHexString(chars[index]);
                        builder.Append(encodedString);
                    }
                    else
                   {
                        builder.Append(chars[index]);
                    }
                }
                return builder.ToString();
            }
            /// <summary>
            /// Determines if the character needs to be encoded.
            /// </summary>
            /// <param name="chr"></param>
            /// <returns></returns>
            private static bool NeedToEncode(char chr)
           {
                string reservedChars = "$-_.+!*'(),@=&";
               if (chr > 127)
                    return true;
                if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0)
                    return false;
                return true;
            }
            /// <summary>
            /// Encodes a non-US-ASCII character.
            /// </summary>
            /// <param name="chr"></param>
            /// <returns></returns>
            private static string ToHexString(char chr)
            {
                UTF8Encoding utf8 = new UTF8Encoding();
                byte[] encodedBytes = utf8.GetBytes(chr.ToString());
                StringBuilder builder = new StringBuilder();
                for (int index = 0; index < encodedBytes.Length; index++)
                {
                    builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16));
                }
                return builder.ToString();
           }

 

 

使用时,只需调用:
string downloadName = ToHexString(“中文名称”);
 

posted on 2012-08-27 12:01  米高佐敦  阅读(293)  评论(0编辑  收藏  举报