`

下载文件设置header的filename要用ISO8859-1编码的原因

阅读更多

很多情况下,我们在写程序的时候都会把代码设置为UTF-8的编码,可以在下载文件设置filename的时候却有违常理,竟然设置编码格式为ISO8859-1,代码如下(如是英文的话就不需要这样处理了):

 response.setHeader("Content-disposition", "attachment; filename=" + new String("中文文件名".getBytes("utf-8"), "ISO8859-1"));

 提取出来最核心的一点,filename=new String("中文文件名".getBytes("utf-8"), "ISO8859-1");

先说为什么使用 ISO8859-1 编码,这个主要是由于http协议,http header头要求其内容必须为iso8859-1编码,所以我们最终要把其编码为 ISO8859-1 编码的字符串;

但是前面为什么不直接使用 "中文文件名".getBytes("ISO8859-1"); 这样的代码呢?因为ISO8859-1编码的编码表中,根本就没有包含汉字字符,当然也就无法通过"中文文件名".getBytes("ISO8859-1");来得到正确的“中文文件名”在ISO8859-1中的编码值了,所以再通过new String()来还原就无从谈起了。 所以先通过 "中文文件名".getBytes("utf-8") 获取其 byte[] 字节,让其按照字节来编码,即在使用 new String("中文文件名".getBytes("utf-8"), "ISO8859-1") 将其重新组成一个字符串,传送给浏览器。

 

参考:http://jiapumin.iteye.com/blog/1006144

1
0
分享到:
评论

相关推荐

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

    ` 这行代码将从客户端传来的GBK编码的文件名(`sDownName`)先转为ISO8859-1编码,然后再用GBK解码。这是因为客户端发送的请求参数通常是GBK编码的,所以需要先转为ISO8859-1,然后才能正确地转换回GBK编码,以避免...

    文件下载,文件名有中文及空格无法显示问题 - CSDN博客1

    对于非IE浏览器,文件名直接用ISO-8859-1编码。这是因为ISO-8859-1编码可以将所有ASCII字符映射到单字节,包括空格,而不会引起问题。最后,将编码后的文件名包裹在双引号中,以解决文件名中空格导致的问题。 整个...

    Struts2文件上传下载 中文乱码

    - **请求编码**:Struts2默认使用ISO-8859-1编码,如果上传文件名包含中文,需在Action中手动将文件名转换为UTF-8,例如使用`new String(file.getName().getBytes("ISO-8859-1"), "UTF-8")`。 - **文件存储**:...

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

    filename = new String(filename.getBytes("UTF-8"), "ISO8859-1"); // Firefox } else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) { filename = URLEncoder.encode(filename, ...

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

    - **Firefox**:使用ISO-8859-1编码。 - **Internet Explorer (IE)**:使用UTF-8编码并通过URL编码方式处理。 - **Safari/Chrome**:使用UTF-8编码,并通过MIME Utility进行Base64编码处理。 - **Opera**:与...

    struts文件下载实例

    filename=" + newString(file.getName().getBytes("iso-8859-1"),"utf-8"))` 设置Content-Disposition响应头,`attachment`表示附件下载,`filename`是文件名,同样需要编码转换。 - `response.addHeader("Content-...

    java导出文件文件名处理

    - Firefox支持使用`ISO-8859-1`编码格式的文件名。 - 示例代码: ```java response.setHeader("Content-Disposition", "attachment;filename=\"" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1")....

    文件下载的代码

    filename = new String(filename.getBytes("iso-8859-1"), "utf-8"); String fileEncode = DownUtils.filenameEncoding(filename, request); response.setHeader("Content-Disposition", "attachment;filename=" + ...

    使用jsp下载excel文件

    - 使用 `new String(fileName.getBytes("GBK"), "ISO8859-1")` 转换文件名以兼容不同的浏览器。 2. **安全问题**: - 对于用户提交的文件名等参数进行校验,防止恶意操作。 - 确保文件路径的安全性,防止访问非...

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

    这主要是因为HTTP协议在传输文件名时,默认使用的是ISO-8859-1编码,而中文字符在此编码下无法正确解析,从而导致乱码的出现。本文将深入探讨这一问题,并提供几种解决方案。 ### 一、问题分析 #### HTTP协议与...

    JavaWeb的各种中文乱码终极解决方法

    2. 使用 `servlet.getWirter` 字符流输出中文时,需要注意默认的字符输出流是采用 ISO-8859-1 编码的,而 ISO-8859-1 编码不支持中文。解决方法是使用 `response.setContentType("text/html;charset=utf-8")`,以...

    (完整版)Java-Web以流方式下载文件时的HTTP头设置.doc

    在本例中,由于文件名可能是中文,因此需要先将文件名的字节转换为ISO8859-1编码,这样在传输过程中可以正确地被接收方解码。 `Content-Disposition`中的`filename`参数用于指定下载后文件的默认名称,当用户在...

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

    String encodedFileName = new String(fileName.getBytes(StandardCharsets.UTF_8), "ISO8859_1"); response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); ``` 接下来,...

    文件下载问题

    fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1"); } else { fileName = URLEncoder.encode(fileName, "UTF-8"); } } else if (clientInfo.toLowerCase().indexOf("firefox") > 0) { // Fire...

    Struts2 下载文件不同浏览器兼容问题.doc

    这段代码将文件名从`ISO-8859-1`编码转换回原始字符串,以便在设置`Content-Disposition`头时能正确显示文件名。 总的来说,解决Struts2下载文件不同浏览器兼容问题的关键在于理解`Content-Disposition`头的处理...

    java实现下载例子

    由于URL编码问题,先将参数从ISO8859-1编码解码为GBK编码,以适应中文环境。然后,结合硬编码的目录路径(`"D:/我.doc"`),构建完整的文件路径。 3. **检查文件存在性**: 创建`java.io.File`对象`ff`,并使用它...

    浏览附件

    - `filename=new String(filename.getBytes("iso8859-1"),"gb2312")` 这个转换是为了解决字符集兼容性问题,从ISO-8859-1编码转换为GBK(或GB2312)编码,以正确显示中文文件名。 6. **文件读取与发送**: - 使用...

    JAVA本地文件下载

    在文件下载的过程中,我们通常会利用`HttpServletResponse`来设置响应头信息,如文件类型、编码方式等,以便浏览器能够正确地解析并下载文件。 ##### 2.2 FacesContext `FacesContext` 是JavaServer Faces (JSF) ...

    java输出文件的几点说明.pdf

    在处理中文文件名时,需要进行编码转换,如使用`new String(fileName.getBytes("GBK"),"iso8859-1")`来避免乱码问题。 四、打开方式的选择 通过设置`Content-disposition`的`attachment`和`inline`,可以控制文件是...

    struts2上传下载 解决中文文件名乱码

    在Java中,默认的字符编码通常是ISO-8859-1,而中文字符通常使用UTF-8编码。当服务器接收到包含UTF-8编码的中文文件名的请求时,如果没有正确处理编码转换,就会导致乱码。Struts2文件上传组件在处理文件名时,如果...

Global site tag (gtag.js) - Google Analytics