zoukankan      html  css  js  c++  java
  • 下载文件 文件名 乱码的问题.

    之前看到博友们一些文章解决asp.net的下载文件名的乱码,但是貌似针对其他浏览器比如Firefox的中文还是有乱码,空格出现+号(这时候IE,Chrome没问题)

    刚才试了试,用这个方法可以搞定了IE,Chrome,Firefox.其他没测试,先贴上代码:

    代码
    public class UrlEncoder 
        { 
            
    /// <summary> 
            
    /// Encodes non-US-ASCII characters in a string. 
            
    /// </summary> 
            
    /// <param name="s"></param> 
            
    /// <returns></returns> 
            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(); 
            } 
        }

    然后在下载下面中:

    代码
    response.ContentType = "application/octet-stream"
    response.HeaderEncoding 
    = Encoding.UTF8; 
    string encodefileName = UrlEncoder.ToHexString(fileName); 
    string userAgent = request.UserAgent.ToUpper(); 
    string fileNameHead = null;
    if (userAgent.IndexOf("FIREFOX"> 0
        fileNameHead 
    = string.Format("attachment;filename*=utf8''{0}", encodefileName); 
    else 
        fileNameHead 
    = string.Format("attachment;filename={0}", encodefileName);
    response.AddHeader(
    "Content-Disposition", fileNameHead); 

    就成了.

  • 相关阅读:
    Windows抓取密码总结
    PHP一句话简单免杀
    Shiro反序列化利用
    windows绕过杀软添加账户密码
    java基础-操作符
    微信小程序开发笔记(十一)--输入框计数
    微信小程序开发笔记(十)--多选标签效果
    微信小程序开发笔记(九)--单选标签效果
    微信小程序开发笔记(八)--路由跳转
    proxy_pass 代理转发
  • 原文地址:https://www.cnblogs.com/bhtfg538/p/1929727.html
Copyright © 2011-2022 走看看