Response.setHeader("Content-Disposition", "attachment; filename=" + fileName+".xls");file.Name为中文则乱码

Response.setHeader("Content-Disposition", "attachment; filename=" + fileName+".xls");
如果file.Name为中文则乱码。解决办法是
方法1:
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
下载的程序里有了上面一句,一般在IE6的下载提示框上将正确显示文件的名字,无论是简体中文,还是日文。但是文字只要超过17个字,就不能下载了。
一. 通过原来的方式,也就是先用URLEncoder编码,当中文文字超过17个时,IE6 无法下载文件。这是IE的bug,参见微软的知识库文章 KB816868 。原因可能是IE在处理 Response Header 的时候,对header的长度限制在150字节左右。而一个汉字编码成UTF-8是9个字节,那么17个字便是153个字节,所以会报错。而且不跟后缀也不对.
方法2:
response.setHeader( "Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) ); 

在确保附件文件名都是简 体中文字的情况下,那么这个办法确实是最有效的,不用让客户逐个的升级IE。如果台湾同胞用,把gb2312改成big5就行。但现在的系统通常都加入了 国际化的支持,普遍使用UTF-8。如果文件名中又有简体中文字,又有繁体中文,还有日文。那么乱码便产生了。另外,在上Firefox (v1.0-en)下载也是乱码。


<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page contentType="text/html;charset=GBK"%>
<%


String key = request.getParameter("key");
String title = request.getParameter("file");
if(title == null) title="downLoad_table";
  title += ".xls";
  System.out.println("JILNJJHXJKHJHJHJHJ"+title);
if(key != null && !key.equals(""))
{
response.setContentType("application/x-msdownload");
response.setHeader("Content-type","application/x-msdownload");
response.setHeader("Accept-Ranges","bytes");
response.setHeader("Content-Disposition","attachment; filename="+ java.net.URLEncoder.encode(title, "UTF-8"));
String str = (String) session.getAttribute(key);
OutputStream os = response.getOutputStream();
    String header = "<html><head><title></title>\n" +
        "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=GBK\">\n" +
        "<meta name=ProgId content=Excel.Sheet>\n" +
        "<style>\n" +
        "<!--\n" +
        "a {\n" +
        "font-size:          9pt;\n" +
        "color:              navy;\n" +
        "text-decoration:    none;\n" +
        "}\n" +
        "a:hover {\n" +
        "font-size:          9pt;\n" +
        "color:              darkorange;\n" +
        "text-decoration:    underline;\n" +
        "}\n" +
        "-->\n" +
        "</style>\n" +
        "</head>\n" +
        "<body>\n";
    os.write(header.getBytes("GBK"));
    os.write(str.getBytes("GBK"));
    os.write("</body></html>".getBytes("GBK"));
os.flush();
os.close();
session.removeAttribute(key);
return;
}
else
{
session.removeAttribute(key);
%>


<html>
<!--
/*****************************************************************************
 * function:
 * Version 1.0
 * Author: leo Leo.Chou decay@163.com
 * create time : 2006.06.01
 * You can copy and/or use and/or modify this program free,but please reserve
 * the segment above. Please mail me if you have any question, Good day!
 *****************************************************************************
 */
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title></title></head>
<body bgcolor="#F0FAFF" text="#FF8040" marginwidth="0" marginheight="0" leftmargin="5" topmargin="1">
<script language="JavaScript">
<!--
alert("下载统计表错误!");
-->
</script>
</body></html>
<%
return;
}
%>

引用\[1\]、\[2\]和\[3\]中的代码片段都是用于设置HTTP响应头,以便将文件作为附件下载。这些代码片段中的`response.setHeader("Content-Disposition", "attachment;filename=" + fileName);`语句用于设置响应头中的Content-Disposition字段,指示浏览器将响应内容作为附件下载。其中,`fileName`是要下载的文件名。 这段代码的作用是告诉浏览器将响应内容作为附件下载,并指定下载的文件名为`fileName`。通过设置Content-Disposition字段为"attachment;filename=" + fileName,浏览器会将响应内容保存为一个文件,并使用指定的文件名。 需要注意的是,这段代码需要在HTTP响应中的输出流被打开之前设置,以确保设置的响应头生效。另外,`fileName`需要进行字符编码转换,以确保文件名在不同浏览器和操作系统下的正确显示。 综上所述,这段代码的作用是设置HTTP响应头,将响应内容作为附件下载,并指定下载的文件名为`fileName`。 #### 引用[.reference_title] - *1* *3* [使用response.setHeader("Content-Disposition","attachment;filename="+fName)下载文件,中文文件名无法...](https://blog.csdn.net/github_36665118/article/details/98332718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用response.setHeader(“Content-disposition“, “attachmentfilename=问卷结果表.xls“);下载文件...](https://blog.csdn.net/weixin_54282421/article/details/121338493)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值