当前位置: 代码迷 >> Web前端 >> 上载文件中文名出现乱码 java
  详细解决方案

上载文件中文名出现乱码 java

热度:111   发布时间:2012-10-06 17:34:01.0
下载文件中文名出现乱码 java
//--------------------
//1 根据不同浏览器区分解决乱码
//--------------------
String filename= "..."; //文件名
String path = "../../.."; //路径

//获取浏览器类型 :Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16 (.NET CLR 3.5.30729)
String agent = request.getHeader("USER-AGENT");  
String downLoadName = null;
if (null != agent && -1 != agent.indexOf("MSIE"))   //IE
{  
  downLoadName = java.net.URLEncoder.encode(filename, "UTF-8"); 
}  
  else if (null != agent && -1 != agent.indexOf("Mozilla")) //Firefox
{      
  downLoadName = new String(filename.getBytes("UTF-8"),"iso-8859-1");   
}  
else   
{
  downLoadName = java.net.URLEncoder.encode(filename, "UTF-8"); 
}  
response.setHeader("Content-disposition", "attachment;filename="
				+ downLoadName );
response.setContentType("application/vnd.ms-excel;charset=UTF-8");

//以下就是文件输出代码了
try {
  FileInputStream fileInputStream = new FileInputStream(path
					+ filename);
  OutputStream out = response.getOutputStream();
  int i = 0;
  while ((i = fileInputStream.read()) != -1) {
    out.write(i);
  }
  fileInputStream.close();
} catch (Exception e) {
  e.printStackTrace();
}

//--------------------
//2 最近看了一下,发现解决乱码不用关心浏览器,可以简单搞定
//--------------------
  String filename= "..."; //文件名
  String path = "../../.."; //路径
  response.setContentType("octets/stream");
  response.addHeader("Content-Type", "text/html; charset=utf-8");
  String downLoadName = new String(filename.getBytes("gbk"), "iso8859-1");
  response.addHeader("Content-Disposition", "attachment;filename="
		+ downLoadName);
//以下加入输出代码就好了

  相关解决方案