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

  • 相关阅读:
    【杂谈】操作系统如何有效地掌控CPU
    【API知识】一种你可能没见过的Controller形式
    【详解】Tomcat是如何监控并删除超时Session的?
    【API知识】RestTemplate的使用
    【杂谈】Tomcat 之 Lifecycle接口
    【杂谈】FilterChain相关知识整理
    【杂谈】Remember-Me的实现
    【杂谈】没有公网IP的电脑如何与外部通信
    【杂谈】tocmat是何时写回响应数据报的
    js的class基础
  • 原文地址:https://www.cnblogs.com/jordan2009/p/2658330.html
Copyright © 2011-2022 走看看