Firefox、IE等浏览器下载文件名中文乱码的一种Server端解决方法


response.reset();
//设置为下载application/x-download
response.setContentType("application/x-download charset=UTF-8");
//通常解决汉字乱码方法用URLEncoder.encode(...)
String filenamedisplay = URLEncoder.encode(filename,"UTF-8")+".doc";
if("FF".equals(getBrowser(request))){
    //针对火狐浏览器处理方式不一样了
    filenamedisplay = new String(filename.getBytes("UTF-8"),"iso-8859-1")+".doc";
}
response.setHeader("Content-Disposition","attachment;filename=" + filenamedisplay);


以下为服务器端判断客户端浏览器类型的方法

private String getBrowser(HttpServletRequest request){
    String UserAgent = request.getHeader("USER-AGENT").toLowerCase();
    if(UserAgent!=null){
        if (UserAgent.indexOf("msie") >=0 ) return "IE";
        if (UserAgent.indexOf("firefox") >= 0) return "FF";
        if (UserAgent.indexOf("safari") >= 0) return "SF";
    }
    return null;

}


//通常可如下:

String UserAgent = request.getHeader("USER-AGENT").toLowerCase();
String strBroeser = null;
if(UserAgent!=null){

if (UserAgent.indexOf("msie") >=0 ) strBroeser = "IE";
if (UserAgent.indexOf("firefox") >= 0) strBroeser = "FF";
if (UserAgent.indexOf("safari") >= 0) strBroeser = "SF";
}

if("FF".equals(strBroeser)){

String fileName = type + "导出." + excel.getFileSuffix();

String enableFileName = "=?UTF-8?B?" + (new String(Base64.encode(fileName.getBytes("UTF-8")))) + "?=";    

response = Response.status(Status.OK).header("Content-Type","application/vnd.ms.excel;charset=GBK")

.header("Content-Disposition","attachment; filename=" +enableFileName).entity(bos.toByteArray()).build();

}
else{

response = Response.status(Status.OK).header("Content-Type","application/vnd.ms.excel;charset=GBK")

.header("Content-Disposition","attachment; filename=\""+URLEncoder.encode(type + "导出."+ excel.getFileSuffix(),"UTF-8") + "\"").entity(bos.toByteArray()).build();

}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值