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

  • 相关阅读:
    10.28MySQL的介绍和安装
    10.24 Event事件,进程池与线程池,协程
    10.23GIL全局解释器锁,多线程作用,死锁,递归锁,信号量
    10.22进程互斥锁,队列,堆栈,线程
    10.21 操作系统发展史,进程
    10.18(粘包问题与解决方法,UDP,socketserver)
    day 67小结
    day 67作业
    day 66 小结
    day 66作业
  • 原文地址:https://www.cnblogs.com/jordan2009/p/2658330.html
Copyright © 2011-2022 走看看