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(“中文名称”);
     

  • 相关阅读:
    MySQL数据库to_char() to_date()
    爬虫的基本要求和考核标准
    打印MySQL操作错误
    暖通施工时遇到大梁不需要打洞,开小孔的三通时无需放样
    CAD 图纸上的实体的扩展数据不能记数据库中的ID 因为数据库数据删除时,ID也被删除,这样就找不到该实体的信息了
    关于定时关机的命令 shutdown s t 30 at 12:00 shutdown s
    下次坐飞机时,我要揣个弹弓进去, 因为我要去完成我小时候想完成而没能完成的梦想
    CAD 块与块相交,交点在块的边界上,不在块内的某实体上
    豆奶粉干吃好吃
    CAD 我们用弧度时 不要去定义Pi是多少,用Math.Pi
  • 原文地址:https://www.cnblogs.com/jordan2009/p/2658330.html
Copyright © 2011-2022 走看看