日期:2014-05-17  浏览次数:20675 次

struts2下载文件名含有中文的文件时出现异常 求帮助
struts2下载 文件名含有中文的文件时出现下载文件的对话框提示文件类型为未知类型,不能正常下载文件,如果下载的文件中不含中文时就一切正常。 请问怎么解决? 谢谢各位。

------解决方案--------------------
将文件名先进行编码downFileName = new String(filename.getBytes("gb2312"),
"ISO8859-1");
------解决方案--------------------
1.修改Tomcat配置:
server.xml文件<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
redirectPort="8443" 

URIEncoding="GBK"
/>
加上【URIEncoding="GBK"】,并把浏览器中internet选项中以utf-8方式邮寄url的选项去掉。

2.后台转换
String filepath = "c:/";//需要下载的文件路径

  String filename = "文档.doc";//需要下载的文件名。

  if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0)

  filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");//firefox浏览器

  else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0)

  filename = URLEncoder.encode(filename, "UTF-8");//IE浏览器

3.
/**
* 下载文件名字符集转换,用于下载是url的转换,用此方法需要把tomcat中server.xml中设置URIEncoding="utf-8"
* 未使用
* @return
* @throws IOException
*/
public static String toUtf8String(String s) {
  StringBuffer sb = new StringBuffer(); 
  for (int i = 0; i < s.length(); i++) {
  char c = s.charAt(i); 
  if (c >= 0 && c <= 500) {
  sb.append(c);
  } else {
  byte[] b;
  try {
  b = Character.toString(c).getBytes("utf-8"); 
  } catch (Exception ex) {
  b = new byte[0];
  }
  for (int j = 0; j < b.length; j++) {
  int k = b[j];
  if (k < 0) {
  k += 256;
  } 
  sb.append("%" + Integer.toHexString(k).toUpperCase()); 
  }
  }
  } 
  return sb.toString();
  } 
可以都试试,如果都不行再去网上找吧,方法非常多。