zoukankan      html  css  js  c++  java
  • 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(“中文名称”);
     

  • 相关阅读:
    ref out param 区别
    SQL语句执行顺序以及oracle基本查询优化
    Ext.LoadMask遮罩的效果几种实现方式
    用ajax技术实现无闪烁定时刷新页面
    ExtJs 实现动态列,动态多表头 在这里添加日志标题
    Ajax中文乱码问题解决方法(服务器端用servlet)
    订购国际机票的常用指令
    ETERM航班销售控制指令
    线程wait()和sleep()的区别
    JSt中对象的prototype属性
  • 原文地址:https://www.cnblogs.com/jordan2009/p/2658330.html
Copyright © 2011-2022 走看看