Content-disposition说明以及中文乱码

http://xianfengmc.blog.163.com/blog/static/82690025200976101051437/

————————————————————————————————————————————————————

Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。Content-disposition 的有效值范围在征求意见文档 (RFC) 1806 中讨论

Content-Disposition就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名。具体的定义如下

content-disposition = “Content-Disposition” “:”
disposition-type *( “;” disposition-parm )
disposition-type = “attachment” | disp-extension-token
disposition-parm = filename-parm | disp-extension-parm
filename-parm = “filename” “=” quoted-string
disp-extension-token = token
disp-extension-parm = token “=” ( token | quoted-string )

 

那么由上可知具体的例子:

Content-Disposition: attachment; filename=“filename.xls”

当 然filename参数可以包含路径信息,但User-Agnet会忽略掉这些信息,只会把路径信息的最后一部分做为文件名。当你在响应类型为 application/octet- stream情况下使用了这个头信息的话,那就意味着你不想直接显示内容,而是弹出一个”文件下载”的对话框,接下来就是由你来决定“打开”还是“保存” 了。 

中文乱码问题:

Response.AddHeader(”Content-Disposition”, “attachment; filename=” + file.Name+”.xls”);中文显示乱码解决办法

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)下载也是乱码。

用这种方法还有一个问题就是:在ie7上能够正常下载,但是如果文件名出现像“——”这样的特殊中文字 符,就会出现意想不到的结果,就是下载下来的文件名和想要的不一样,它只会出现一串字母,不会出现你想要的名字,这种问题可以通过把gb2312改成 gbk解决,文后附有gb2312和gbk的区别。

问:ISO-8859-1 , ISO8859-1 , ISO8859_1 作为getBytes的参数,是不是应该只有第一个才可以啊?

答:第一个是标准,但是   java   兼容了后面两种,使用时都可以的。但是有时大小写也有区别,像在连接mysql数据库时就是。

GBK:       汉字国标扩展码,基本上采用了原来GB2312-80所有的汉字及码位,并涵盖了原Unicode中
所有的汉字20902,总共收录了883个符号, 21003个汉字及提供了1894个造字码位。
Microsoft简体版中文Windows 95就是以GBK为内码,又由于GBK同时也涵盖了Unicode所有CJK汉字,
所以也可以和Unicode做一一对应。

GB码,全称是GB2312-80《信息交换用汉字编码字符集 基本集》,1980年发布,是中文信息处理的
国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。
P-Windows3.2和苹果OS就是以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编码、
但兼容支持GB2312。GB码共收录6763个简体汉字、682个符号,其中汉字部分:一级字3755,
以拼音排序,二级字3008,以偏旁排序。该标准的制定和应用为规范、推动中文信息化进程起了
很大作用。

GBK编码是中国大陆制订的、等同于UCS的新的中文编码扩展国家标准。GBK工作小组于1995年10月,
同年12月完成GBK规范。该编码标准兼容GB2312,共收录汉字21003个、符号883个,并提供1894个
造字码位,简、繁体字融于一库。

转载于:https://www.cnblogs.com/cuizhf/archive/2013/01/20/2868407.html

你可能感兴趣的:(Content-disposition说明以及中文乱码)