-
IE7下载时文件名乱码20
代码大致是这样写的response.setContentType(contentType); if(StringUtils.hasText(encoding)) response.setCharacterEncoding(encoding); else response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition", "filename=\"" + new String(fileName.getBytes(), "ISO-8859-1") + "\"");
1.
使用windows测试,罗列一个目录下的文件, fileName 取的是 file.getName() 均可正常下载。
2.
使用Linux服务器,从mysql(utf-8)中获取的fileName,
使用 IE6、Firefox、chrom、迅雷 均能正常下载,但IE7下载时是乱码,某些文件下载时弹出下载出错的框,进度条0%,这部分文件将文件名改掉后,重新上传,又可以正常下载,确定为文件名乱码所导致的错误。
初步怀疑是 new String(fileName.getBytes(), "ISO-8859-1") 的问题
问题补充:
代码大致是这样写的
<pre name="code" class="java">
response.setContentType(contentType);
if(StringUtils.hasText(encoding))
response.setCharacterEncoding(encoding);
else
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "filename=\"" + new String(fileName.getBytes(), "ISO-8859-1") + "\"");</pre>
1.
使用windows测试,正常,IE7也可以正常下载
2.
使用Linux服务器,
使用 IE6、Firefox、chrom、迅雷 均能正常下载,但IE7下载时是乱码,某些文件下载时弹出下载出错的框,进度条0%,这部分文件将文件名改掉后,重新上传,又可以正常下载,确定为文件名乱码所导致的错误。
初步怀疑是 new String(fileName.getBytes(), "ISO-8859-1") 的问题
问题补充:
问题已解决:
String s = new String("中文"); sb.append("\nGetBytes():"+byteToString(s.getBytes())); sb.append("\nGetBytes(GBK):"+byteToString(s.getBytes("GBK"))); sb.append("\nGetBytes(UTF-8):"+byteToString(s.getBytes("UTF-8"))); sb.append("\nGetBytes(ISO):"+byteToString(s.getBytes("ISO-8859-1"))); String s2 = new String(s.getBytes(),"ISO-8859-1"); sb.append("\nout:"+byteToString(s2.getBytes("ISO-8859-1")));
win:
GBK
GetBytes():d6d0cec4
GetBytes(GBK):d6d0cec4
GetBytes(UTF-8):e4b8ade69687
GetBytes(ISO):3f3f
out:d6d0cec4
linux:
UTF-8
GetBytes():e4b8ade69687
GetBytes(GBK):d6d0cec4
GetBytes(UTF-8):e4b8ade69687
GetBytes(ISO):3f3f
out:e4b8ade69687
分析: IE7 不能够识别以 UTF-8 编码的下载文件名。
解决方法: new String(fileName.getBytes("GBK"),"ISO-8859-1")2008年11月19日 11:39
4个答案 按时间排序 按投票排序
-
采纳的答案
new String(fileName.getBytes("ISO-8859-1"))
or
new String(fileName.getBytes("ISO-8859-1"),"UTF-8")2008年11月19日 17:06
-
引用
初步怀疑是 new String(fileName.getBytes(), "ISO-8859-1") 的问题
应该是new String(fileName.getBytes("ISO-8859-1"), "GBK")
2008年11月19日 23:41
-
应该是文件名乱码的问题。
我觉得还是用filter实现编码转换比较好。
http://onlylove.iteye.com/blog/1565082008年11月19日 12:00
-
引用new String(fileName.getBytes(), "ISO-8859-1")
Debug下看是否正常的文件名; 就能确定是否是编码问题了..2008年11月19日 11:51
相关推荐
彻底解决Asp.net 文件下载时文件名的中文乱码和空格异常全球性技术难题 本文用 C# 代码解决了在目前四种流行浏览器中Asp.net 输出文件流时文件名的空格及中文字符乱码这两个问题。使用本文的代码,你将可以让 IE...
这种问题通常有两种情况:一是下载时中文文件名乱码,二是下载时因为路径中包含中文文件名乱码。本文将详细介绍 Java 文件下载文件名乱码问题解决方案,通过示例代码说明如何解决这两种情况下的乱码问题。 一、下载...
首先,我们需要理解问题的核心:浏览器在请求服务器上的资源,特别是文件时,如果文件名包含中文字符,可能会因为编码不一致导致乱码。这主要涉及到字符编码的两个关键概念——Unicode和字符编码转换。 1. **...
- 在设置文件名时,一定要确保文件名已经进行了正确的编码转换,否则会导致下载时文件名出现乱码。 - 注意异常处理,确保文件读取过程中的错误能够被妥善处理。 - 对于不同浏览器的兼容性问题,可以通过检测User-...
C#HTML导出excel时文件名,IE,火狐浏览器不兼容,乱码。故此将ExcelHelper.FileName(Request.ServerVariables["HTTP_USER_AGENT"].ToUpper(), $"文件名{DateTime.Now:_yyyyMMdd}", out filename, out encoding);
本项目针对的一个重要问题就是如何在使用IE11浏览器时避免出现文件名乱码的情况。 首先,我们要理解这个问题的根源。IE11在处理非ASCII字符的文件名时,可能会由于编码不一致导致乱码。这是因为不同的系统和浏览器...
总结来说,通过设置正确的Content-Disposition响应头,并将文件名进行UTF-8编码,可以有效解决Web应用中文件下载时的中文文件名乱码问题。同时,根据文件类型设置正确的Content-Type响应头,以及考虑浏览器的兼容性...
在Java编程中,当涉及到文件下载时,可能会遇到文件名乱码的问题,尤其是在不同浏览器环境下。这通常是由于浏览器对文件名编码方式的理解不一致导致的。以下是对标题和描述中所述知识点的详细解释: 首先,我们需要...
发现很多园子里的人在处理Response下载文件名是使用这个方法 Response.AppendHeader(“Content-Disposition”, “attachment;filename=” + HttpUtility.UrlEncode(fileInfo.Name, System.Text.Encoding.UTF8)); 但...
从提供的文件信息中,我们可以提炼出关于实现文件下载以及如何处理IE下中文文件名乱码的具体知识点。 ### 知识点一:PHP实现文件下载的基本原理 在PHP中,要实现文件的强制下载,通常会使用header()函数来发送一个...
文件名乱码通常是因为浏览器在处理文件下载时,没有正确地编码和解码包含特殊字符的文件名。这与浏览器的实现方式和HTTP协议的处理有关。例如,Internet Explorer (IE) 和 Firefox 对文件名编码的处理方式就有所不同...
2. **支持所有主流浏览器的下载文件名乱码解决方案**: - 针对不同浏览器对文件名中乱码的处理差异,需要利用RFC2231标准对HTTP头部进行编码。按照这一标准,文件名需要以`filename*`形式进行编码。 - 例如:`...
https://blog.csdn.net/feiwei/article/details/5867555 根据这个博客重新编译的,可以解决IE访问Apache Ftp Server 中文目录、中文文件名乱码的问题
确保数据库和文件系统的编码也设置为UTF-8,以避免在存储和读取中文数据时出现乱码。 4. **前端页面编码**: HTML页面应指定正确的编码,例如`<meta charset="UTF-8">`。 5. **其他语言环境下的解决方案**: ...
ie浏览器(11)解决下载文件名 乱码 Java 工具类 util 类 下载附件的名称乱码