web开发时在浏览器上下载文件中文名字乱码问题

一直以来,编译器跟浏览器的中文编码问题都让我很头疼,今天我就做了一下总结,今后web开发下载文件的时候就不用担心乱码的问题了。
       浏览器可以自己识别编码,是因为与Content-Disposition相互对应,如果一致就不会出现乱码问题了。
       首先应该是IE浏览器,大多数人开发都会参照IE,因为没有过多的插件,可以最大限度的显示代码的缺点和BUG。
      (1) IE浏览器使用的是直接urlencode,编写filename时格式如下:
       filename = URLEncoder.encode(filename,"UFT8");
       response.setHeader("Content-disposition","attachment; filename="+ filename)
       这样就可以正常编码 了。一般也适用于其他的浏览器。
      (2)Opera浏览器,采用的是filename*的方式
        new_filename* = "UTF-8"+filename
      (3) Safar浏览器采用的是ISO编码
       filename = new String(filename.getBytes("UFT-8"),"ISO8859-1");
      (4) Chrome浏览器,只能采用MimeUtility编码,或者ISO的中文输出
       filename = MimeUtility.encodeText(filename,"UFT8","B");
      (5) 火狐浏览器FireFox  ,可以使用MimeUtility,ISO或者filename*的中文输出
      另外判断是什么类型的浏览器可以同userAgent.indexOf("浏览器类型")来判断

String agent = request.getHeader("user-agent");
if(agent.contains("Firefox")){
	fileNameDisplay = new String(fileNameDisplay.getBytes("GB2312"),"ISO-8859-1");
} else {
	//encode后替换  解决空格问题 . encode后的内容 浏览器是如何解析的?
fileNameDisplay = URLEncoder.encode(fileNameDisplay, "UTF-8").replaceAll("\\+", "%20");
	//fileNameDisplay = URLEncoder.encode(fileNameDisplay, "UTF-8");
}
response.addHeader("Content-Disposition", "attachment;filename=" + fileNameDisplay);


原文地址: http://blog.sina.com.cn/s/blog_b216acc90102vkq7.html

你可能感兴趣的:(java语言)