做附件下载时,一般如此实现:
out = response.getOutputStream();
response.reset();
response.setHeader("Content-Disposition", "attachment;filename=" + browName);
response.setContentType(contentType);
byte[] fileByte = new byte[1024];
while (fileInputStream.read(fileByte) > 0){
out.write(fileByte, 0, fileByte.length);
}
out.flush();
out.close();
out = null;
如果文件名是中文,下载显示乱码,一般使用browName=java.net.URLEncoder.encode(realFileName, "UTF-8")编码处理,此方式在FF下显示乱码,在IE下如果文件名长则不能直接打开。
于是想到了RFC2047编码,但IE又下不支持RFC2047,但可以变通,判断客户端类型解决;
问题又出现:使用RFC2047编码,如果文件名长,则出现换行(根据RFC822规定,每76个字符,还需要加上一个回车换行。),所以还要处理换行符。
综合解决方式是:
String browName = "=?UTF-8?B?" + new String(Base64.encode(realFileName.getBytes("UTF-8"))) + "?=";
//处理换行符(如果存在)
StringReader sr = new StringReader(browName);
BufferedReader br = new BufferedReader(sr);
String line = null;
String temp = "";
while((line=br.readLine())!=null){
temp += line;
}
browName = temp;
//如果是IE
String clientInfo = request.getHeader("User-agent");
if(clientInfo != null && clientInfo.indexOf("MSIE") > 0 ){//IE采用URLEncoder方式处理
if(clientInfo.indexOf("MSIE 6") > 0 || clientInfo.indexOf("MSIE 5") > 0){//IE6,用GBK,此处实现由局限性
browName = new String(realFileName.getBytes("GBK"),"ISO-8859-1");
}else{//ie7+用URLEncoder方式
browName = java.net.URLEncoder.encode(realFileName, "UTF-8");
}
}
response.setHeader("Content-Disposition",
"attachment;filename=" + browName);
解决!
。。。。
此实现方式 如果在IE5、6下查看非中文、非英文的附件名还是会出现乱码,涉及国际化时应注意,
但基本能满足国人处理中文附件名的问题。
在IE5、6下想不出解决方式了,谁有解决方案请跟贴!
分享到:
相关推荐
然而,在处理中文附件名称时,由于编码不兼容或者处理不当,可能会出现乱码问题。这个问题在中文用户群体中尤为常见,因为它直接影响到用户的使用体验和数据的准确性。 在“fckeditor(java版-解决中文附件名称乱码...
在Java编程中,遇到“java下载时文件名乱码”的问题通常是由于编码不一致或处理不当造成的。在处理文件下载时,尤其是从Web服务器下载带有非ASCII字符的文件名时,这种问题尤为常见。让我们深入探讨这个问题,并提供...
### Java导出Excel文件并下载到客户端(含解决中文乱码问题) 在现代的企业级应用开发中,数据导出功能是非常常见的一种需求。特别是在B/S架构的应用中,用户经常需要将查询结果导出为Excel文件以便进行后续的数据...
在Java编程中,文件下载是常见的任务之一,特别是在构建Web应用程序时。Java文件下载涉及到将服务器上的文件传输到客户端,例如浏览器。这个过程可能会遇到一些问题,如中文乱码,这是由于字符编码不匹配导致的。...
在HTTP请求中,特别是使用`multipart/form-data`编码方式上传文件时,JMeter可能无法正确处理非ASCII字符,如中文字符,导致乱码。这是由于JMeter内部处理文件名的方式与HTTP协议中对非ASCII字符的编码规则不匹配所...
JavaMail是Java编程语言中的一个开源库,用于处理电子邮件通信,包括发送、接收邮件以及管理邮件附件。在JavaMail框架的帮助下,开发者可以方便地实现SMTP(简单邮件传输协议)、POP3(邮局协议版本3)和IMAP...
用户在使用这些平台进行文件下载时可能会遇到附件名称出现乱码的情况,这不仅影响用户体验,也会影响到系统的正常运行。本文将详细探讨WebLogic与Tomcat环境下解决下载附件乱码问题的方法。 #### 一、问题背景 在...
然而,在处理中文文件名下载时,可能会遇到乱码问题。这篇博客“Sturts2文件下载—中文乱码处理”将详细探讨如何解决这一问题。 首先,我们需要了解为什么会出现中文乱码。在HTTP协议中,文件名是作为请求的一部分...
例如,当系统试图用错误的字符集(如ASCII)解读非ASCII字符(如中文字符)时,就会出现乱码。这在处理不同来源或格式的数据时尤为常见,尤其是当数据跨越不同的操作系统、应用程序或网络协议时。 #### 2. 字符编码...
这个“java简易小邮箱”项目特别强调了发送和下载附件的功能,并且解决了字符编码问题,确保了邮件内容的正确显示。 首先,我们来探讨Java邮件API(JavaMail API)。JavaMail API是Java平台上的标准API,用于处理...
在使用Struts2进行文件下载功能时,可能会遇到中文乱码的问题。本篇主要讨论如何解决Struts2.2.1版本中文件下载时的中文乱码问题,以及相关的配置和实现细节。 首先,文件下载的关键在于设置正确的HTTP响应头。`...
然而,在这个过程中,可能会遇到一个常见的问题,即中文字符显示为乱码或者方框。本文将深入探讨这个问题,并提供一个有效的解决方案。 首先,我们要理解PPT转PDF乱码的根本原因。通常,PPT文件包含多种字体,特别...
在使用 SpringBoot 发送邮件时,经常会遇到附件名称中文乱码的问题。本文将详细介绍解决此问题的方法。 问题分析 在发送邮件时,我们需要将附件名称编码,以便正确地传输中文名称。然而,在 SpringBoot 中,如果不...
然而,当处理包含中文字符的请求或响应时,如果没有正确配置,就可能会出现乱码问题。这个问题通常涉及到字符编码设置,包括请求头、请求体以及响应的解析。 HttpClient中文乱码问题的核心在于字符编码不一致或者未...
当处理非ASCII字符(如中文、日文等)的文件名时,可能会出现乱码。这是因为ZIP格式默认使用的是老式的CP437编码,不支持Unicode。为了解决这个问题,我们需要在创建`ZipEntry`时指定合适的编码,例如UTF-8: ```...
2. **支持中文附件名的文件下载**:在第二个`action`示例中,`download2`不仅处理文件下载,还考虑到了中文文件名的兼容性问题。通过在`contentDisposition`参数中使用`${downloadFileName}`,Struts2会调用`action`...
然而,由于字符编码问题,用户可能会遇到中文乱码的问题。本文将深入探讨FCKeditor编辑器中的中文乱码问题及其彻底解决方案。 中文乱码问题通常源于字符编码不一致。在计算机系统中,不同的程序或文件可能使用不同...
在处理Web应用中的文件下载功能时,经常遇到的问题之一就是文件名出现乱码,尤其是当文件名包含中文字符时。为了解决这一问题,本文将详细介绍如何通过Java Servlet技术中的response.setHeader()方法来设置正确的...
在Java Web开发中,使用SmartUpload组件上传附件时,可能会遇到中文文件名乱码的问题。这个问题通常涉及到字符编码的处理,特别是在不同的操作系统和Web服务器环境下。以下是对彻底解决该问题的详细解析: 首先,...
在Java Web应用程序中,当用户尝试下载文件(如rar格式或其他格式)时,无论文件名或内容是否包含中文字符,下载结果总是显示为乱码。此外,这种情况下浏览器并不会给出任何下载提示或错误消息,似乎它并未识别到这...