`
反求诸己
  • 浏览: 544897 次
  • 性别: Icon_minigender_1
  • 来自: 湖南娄底
社区版块
存档分类
最新评论

解决不同浏览器上中文文件名的下载乱码问题

 
阅读更多

目前,我们的U盘和Mail中对含有中文文件名的下载处理都不是太好

 

在某些浏览器下,下载显示的文件名是乱码

 

我又顺便看了一下其他各邮箱和网盘的处理,只有QQ处理的比较好

 

现在时基本上每个浏览器都能正常显示中文的文件名

 

花了一些时间对IE,Firefox,Opera,Chrome,Safari这几个浏览器进行了测试

 

总结了一下,各浏览器能正确识别的编码格式,只要按照这样的编码来设置对应的Content-Disposition

 

那么应该就不会出现中文文件名的乱码问题了

 

 

 

首先,Content-Disposition值可以有以下几种编码格式

 

1. 直接urlencode:

 

    Content-Disposition: attachment; filename="struts2.0%E4%B8%AD%E6%96%87%E6%95%99%E7%A8%8B.chm"

 

2. Base64编码:

 

    Content-Disposition: attachment; filename="=?UTF8?B?c3RydXRzMi4w5Lit5paH5pWZ56iLLmNobQ==?="

 

3. RFC2231 规定的标准:

 

    Content-Disposition: attachment; filename*=UTF-8''%E5%9B%9E%E6%89%A7.msg

 

4. 直接ISO编码的文件名:

 

    Content-Disposition: attachment;filename="测试.txt"

 

然后,各浏览器支持的对应编码格式为:

 

1.  IE浏览器,采用URLEncoder编码

 

2.  Opera浏览器,采用filename*方式

 

3.  Safari浏览器,采用ISO编码的中文输出

 

4.  Chrome浏览器,采用Base64编码或ISO编码的中文输出

 

5.  FireFox浏览器,采用Base64或filename*或ISO编码的中文输出

 

 

 

对应的Java代码如下:

 

折叠 复制代码

 

  1. new_filename = URLEncoder.encode(filename,  "UTF8" );  
  2.  

  3. // 如果没有UA,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的   
  4.  

  5. rtn = "filename=""  + new_filename +  """ ;  
  6.  

  7. if  (userAgent !=  null )  
  8.  

  9. {  
  10.  

  11.     userAgent = userAgent.toLowerCase();  
  12.  

  13.     // IE浏览器,只能采用URLEncoder编码   
  14.  

  15.     if  (userAgent.indexOf( "msie" ) != - 1 )  
  16.  

  17.     {  
  18.  

  19.         rtn = "filename=""  + new_filename +  """ ;  
  20.  

  21.     }  
  22.  

  23.     // Opera浏览器只能采用filename*   
  24.  

  25.     else   if  (userAgent.indexOf( "opera" ) != - 1 )  
  26.  

  27.     {  
  28.  

  29.         rtn = "filename*=UTF-8''"  + new_filename;  
  30.  

  31.     }  
  32.  

  33.     // Safari浏览器,只能采用ISO编码的中文输出   
  34.  

  35.     else   if  (userAgent.indexOf( "safari" ) != - 1  )  
  36.  

  37.     {  
  38.  

  39.         rtn = "filename=""  +  new  String(filename.getBytes( "UTF-8" ), "ISO8859-1" ) +  """ ;  
  40.  

  41.     }  
  42.  

  43.     // Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出   
  44.  

  45.     else   if  (userAgent.indexOf( "applewebkit" ) != - 1  )  
  46.  

  47.     {  
  48.  

  49.         new_filename = MimeUtility.encodeText(filename, "UTF8" "B" );  
  50.  

  51.         rtn = "filename=""  + new_filename +  """ ;  
  52.  

  53.     }  
  54.  

  55.     // FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出   
  56.  

  57.     else   if  (u
    serAgent.indexOf(
    "mozilla" ) != - 1 )  
  58.  

  59.     {  
  60.  

  61.         rtn = "filename*=UTF-8''"  + new_filename;  
  62.  

  63.     }  
  64.  

  65. }  

 

 

目前,我测试的情况,在几个浏览器上都能正常输入中文文件名

 

但,也许浏览器不同版本,可能还会有乱码的情况…..
分享到:
评论

相关推荐

    不同浏览器上中文文件名的下载乱码问题

    不同浏览器上中文文件名的下载乱码问题 浏览器IEChromeSafariOpera 浏览器能正确识别的编码格式

    解决浏览器请求响应中文文件名乱码问题的小工具包,解决中文文件名问题

    首先,我们需要理解问题的核心:浏览器在请求服务器上的资源,特别是文件时,如果文件名包含中文字符,可能会因为编码不一致导致乱码。这主要涉及到字符编码的两个关键概念——Unicode和字符编码转换。 1. **...

    解决不同浏览器下载时中文名乱码问题

    ### 解决不同浏览器下载时中文名乱码问题 在Web开发过程中,经常遇到的一个问题是当用户尝试下载包含中文字符的文件名时,会出现乱码的情况。这是因为不同的浏览器处理文件名编码的方式有所不同,导致服务器端设置...

    ASP.NET 解决下载文件名乱码问题

    本文将深入探讨如何在ASP.NET中解决下载文件名乱码的问题,通过分析代码示例,提供实用的解决方案。 ### 理解文件名乱码的原因 文件名乱码主要是由于编码格式不一致导致的。当服务器端和客户端对同一字符串的编码...

    Java实现文件下载并解决中文文件名乱码

    本文将详细介绍如何使用Java实现文件下载功能,并重点讲解如何解决中文文件名乱码的问题。 #### 一、基本原理与步骤 1. **读取文件**:首先需要将要下载的文件读取到内存中。 2. **设置响应头**:为了正确地告知...

    【文件下载】及解决文件名中文乱码问题

    总的来说,解决中文文件名乱码问题需要从多个角度考虑,包括服务器配置、HTTP头部设置、编码转换以及选择合适的工具。了解并掌握这些知识点,有助于我们在实际工作中更顺畅地处理各种语言环境下的文件下载问题。对于...

    彻底解决Asp.net 文件下载时文件名的中文乱码和空格异常全球性技术难题

    本文用 C# 代码解决了在目前四种流行浏览器中Asp.net 输出文件流时文件名的空格及中文字符乱码这两个问题。使用本文的代码,你将可以让 IE(Internet Explorer)、Opera、Firefox 及 Chrome 的用户享受到没有乱码且...

    jsp实现文件下载与中文文件名乱码问题解决

    本文将深入解析如何在JSP中实现文件下载,并解决中文文件名乱码的问题。 首先,我们需要了解HTTP协议在处理文件下载时的角色。当用户请求下载一个文件时,服务器需要设置响应头来指示浏览器如何处理这个响应。在JSP...

    服务器下载word乱码解决方案(文件名乱码、内容乱码)

    往往开发环境和生产环境在环境部署时会遇到很多奇怪的问题,此次word文档下载就被卡住了,通过一番努力终于找到了原因,分享给大家。上传文件txt格式,内有方法详细的代码注释及原因说明,jar包比较常见,大家自行...

    解决jsmartcom中文文件名上传与下载乱码问题

    总之,解决JSmartCom的中文文件名乱码问题,不仅需要深入理解JavaScript和HTTP的字符编码机制,还需要对JSmartCom的源码有充分的认识,以便定位和修改关键代码。通过以上所述的步骤和方法,你应该能够成功地克服这个...

    文件下载response.setHeader()下载中文文件名乱码问题解决办法.pdf

    在使用上述方法解决中文文件名乱码问题时,还需要考虑浏览器兼容性,确保在不同的浏览器上都能正确显示文件名。 总结来说,通过设置正确的Content-Disposition响应头,并将文件名进行UTF-8编码,可以有效解决Web...

    详解关于java文件下载文件名乱码问题解决方案

    通过上述代码,我们可以解决 Java 文件下载文件名乱码问题,但需要注意的是,在不同的浏览器中,乱码问题的解决方法可能不同。例如,在 IE 浏览器中,需要使用 URLEncoder 对文件名进行编码,而在非 IE 浏览器中,...

    welogic struts2文件下载中文件名乱码:在tomcat中是好的哦

    在IT领域,特别是Web开发中,处理文件下载时遇到文件名乱码问题是一个常见的挑战,尤其是在不同的服务器环境下,如WeLogic与Tomcat之间的差异。本文将深入探讨在WeLogic服务器中使用Struts2框架进行文件下载时遇到的...

    文件下载,二进制流转换成文件 解决中文名乱码的问题

    在IT领域,尤其是在Web开发中,处理文件下载和解决中文文件名乱码问题是常见的需求之一。本文将深入探讨如何通过二进制流转换为文件来实现文件下载,并着重讲解如何解决中文文件名出现的乱码问题。 ### 文件下载...

    java下载时文件名乱码

    在Java编程中,遇到“java下载时文件名乱码”的问题通常是由于编码不一致或处理不当造成的。在处理文件下载时,尤其是从Web服务器下载带有非ASCII字符的文件名时,这种问题尤为常见。让我们深入探讨这个问题,并提供...

    下载文件个别浏览器文件名乱码解决办法

    总的来说,解决浏览器文件名乱码问题的关键在于识别用户使用的浏览器类型,并根据其特性进行适当的文件名编码处理。通过这种方式,我们能够确保无论用户使用何种浏览器,都能正确下载并显示文件名。当然,这种方法并...

    跨浏览器PHP下载文件名中的中文乱码问题解决方法

    在PHP编程中,当涉及到跨浏览器的文件下载时,可能会遇到中文文件名显示为乱码的问题。这个问题主要是由于不同浏览器对文件名编码处理方式的差异所导致的。本文将详细介绍如何通过PHP解决这一问题。 首先,我们需要...

Global site tag (gtag.js) - Google Analytics