`
quanyongan
  • 浏览: 572 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java中浏览器的文件下载时文件名乱码问题

    博客分类:
  • Java
 
阅读更多

我最近在开发时遇到了文件另存为时文件名出现乱码,在火狐上正常的文件名,在IE中又出现乱码问题,然后好不容易在IE下调试好了文件名乱码问题,在火狐下又出现乱码,最后终于感觉这样是能解决了。具体如下:

public static String toUtf8String(String s) { 
      
             StringBuffer sb = new StringBuffer(); 
             for (int i = 0; i < s.length(); i++) { 
                 char c = s.charAt(i); 
                 if (c >= 0 && c <= 255) { 
                     sb.append(c); 
                 } else { 
                     byte[] b; 
                     try { 
                         b = Character.toString(c).getBytes("utf-8"); 
                     } catch (Exception ex) { 
                         exceptionUtil.error("将文件名中的汉字转为UTF8编码的串时错误,输入的字符串为:" + s); 
                         b = new byte[0]; 
                     } 
                     for (int j = 0; j < b.length; j++) { 
                         int k = b[j]; 
                         if (k < 0) 
                             k += 256; 
                         sb.append("%" + Integer.toHexString(k).toUpperCase()); 
                     } 
                 } 
             } 
             return sb.toString(); 
         } 
      
         /** 
          * 根据不同浏览器将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名. 
          *  
          * @param s 
          *            原文件名 
          * @return 重新编码后的文件名 
          */ 
         public static String toUtf8String(HttpServletRequest request, String s) { 
             String agent = request.getHeader("User-Agent"); 
             try { 
                 boolean isFireFox = (agent != null && agent.toLowerCase().indexOf("firefox") != -1); 
                 if (isFireFox) { 
                     s = new String(s.getBytes("UTF-8"), "ISO8859-1"); 
                 } else { 
                     s = StringUtil.toUtf8String(s); 
                     if ((agent != null && agent.indexOf("MSIE") != -1)) { 
                         // see http://support.microsoft.com/default.aspx?kbid=816868 
                         if (s.length() > 150) { 
                             // 根据request的locale 得出可能的编码 
                             s = new String(s.getBytes("UTF-8"), "ISO8859-1"); 
                         } 
                     } 
                 } 
             } catch (UnsupportedEncodingException e) { 
                 e.printStackTrace(); 
             } 
             return s; 
         }

 

分享到:
评论

相关推荐

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

    ### Java实现文件下载并解决中文文件名乱码 在日常的Web开发中,经常会遇到需要让...通过以上步骤和注意事项,我们可以有效地实现Java中文件的下载功能,并且解决了中文文件名可能带来的乱码问题,提高了用户体验。

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

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

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

    Java 文件下载文件名乱码问题是指在下载 Java 文件时,文件名出现乱码现象,影响下载文件的正确性。这种问题通常有两种情况:一是下载时中文文件名乱码,二是下载时因为路径中包含中文文件名乱码。本文将详细介绍 ...

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

    解决WeLogic服务器中Struts2文件下载时的文件名乱码问题,需要综合考虑编码转换、Struts2配置以及Java代码实现等多方面因素。通过上述方法,可以有效避免文件名乱码,确保文件下载功能在WeLogic服务器环境下稳定运行...

    java下载时文件名乱码

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

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

    当用户请求下载一个文件时,服务器需要设置响应头来指示浏览器如何处理这个响应。在JSP中,我们通常使用`response`对象来设置这些头信息。`response.setContentType("APPLICATION/OCTET-STREAM")`告诉浏览器这是一个...

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

    文件下载时出现中文乱码的原因主要是由于浏览器对HTTP响应头中的`Content-Disposition`字段中文件名部分的解析方式不同。该字段通常用来指定下载文件的默认名称及展示方式(如内嵌或下载)。对于中文文件名而言,若...

    java导出文件文件名处理

    本文将详细介绍如何在Java中处理导出文件时的文件名问题,确保用户能够正常下载带有中文或其他特殊字符的文件名。 #### 知识点一:理解文件名编码问题 在Web应用中,当服务器向客户端发送文件时,HTTP协议中会包含...

    Java应用下载文件功能,输出文件名中的中文乱码

    在Java应用中实现文件下载功能时,经常遇到的一个问题是输出文件名中的中文字符会出现乱码。这主要是因为HTTP协议在传输文件名时,默认使用的是ISO-8859-1编码,而中文字符在此编码下无法正确解析,从而导致乱码的...

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

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

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

    总结来说,通过设置正确的Content-Disposition响应头,并将文件名进行UTF-8编码,可以有效解决Web应用中文件下载时的中文文件名乱码问题。同时,根据文件类型设置正确的Content-Type响应头,以及考虑浏览器的兼容性...

    Java Web文件下载,解决了使用IE11下载文件时所出现的乱码问题

    总的来说,解决Java Web中IE11下载文件时的乱码问题,需要对HTTP协议、字符编码以及Servlet有深入的理解。通过正确设置`Content-Disposition`响应头,并结合URL编码,可以确保文件名在不同浏览器中的一致性。这个...

    Java下载文件时文件名乱码问题解决办法

    总的来说,解决Java下载文件时的文件名乱码问题,需要理解HTTP协议和浏览器对文件名编码的处理差异,以及利用适当的编码转换方法,确保在所有支持的浏览器中都能正确显示和保存文件名。在编写代码时,一定要注意兼容...

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

    在IT行业中,文件管理和下载是常见的操作,尤其是在处理包含中文字符的文件时,可能会遇到乱码问题。本文将深入探讨“文件下载”以及如何解决文件名中文乱码问题,这在处理多语言环境下的数据交流时显得尤为重要。 ...

    Java文件下载,Java文件下载中文乱码,Java通用文件下载

    在Java编程中,文件下载是常见的任务之一,特别...通过以上步骤,你可以实现一个基本的Java文件下载功能,并解决中文文件名乱码的问题。对于更复杂的应用场景,如大文件分块下载、断点续传等,还需要进一步优化和扩展。

    java导出excel文件并且下载到客户端(包括解决中文乱码).txt

    本文将详细介绍如何使用Java实现将数据导出为Excel文件,并且能够被浏览器正确下载,同时解决中文乱码问题。 #### 技术选型 为了实现这一目标,我们主要采用以下技术栈: - **服务器端**:Java Servlet API,用于...

    [jspSmartUpload]------------>jspSmartUpload上传中文文件名 乱码问题

    标题中的“jspSmartUpload上传中文文件名乱码问题”是一个常见的技术挑战,特别是在处理Web应用程序时,特别是那些涉及用户上传文件的场景。JSP Smart Upload是早期流行的一个用于Java Web应用的文件上传组件,它...

    下载文件提示框中文乱码

    4. 文件名编码转换:对于文件名乱码,可以使用专门的工具进行转换,如“File Renamer”或“Advanced Renamer”,这些工具能帮助批量转换文件名的编码。 5. 操作系统设置:在Windows系统中,可以通过修改注册表或者...

Global site tag (gtag.js) - Google Analytics