针对前台json乱码和不同浏览器文件下载时文件名乱码问题

第一个问题:介绍两种解决Spring返回json到前台乱码的两种解决方法

a.注解的修改方式,在@RequestMapping中添加products="text/html;charset=utf-8"

@RequestMapping(value="/book/getBook.do", produces = "text/html;charset=UTF-8")
	public @ResponseBody String getBook(String name){
		 List<Book> list =bookService.getBook(); 
		 for(Book bo:list){
			 System.out.println("id:"+bo.getId()+" name:"+bo.getName()+" author:"+bo.getAuthor());
		 }
		 String json = JSONObject.toJSONString(list);
		 System.out.println("json:"+json);
		return json;
	}

b.在返回值的时候将json的格式进行更改

response.setContentType("text/html;charset=UTF-8);
PrintWriter out = response.getWriter();

以上a方法亲测,改起来也比较顺手;b方法忘了试没试了,好奇的小伙伴可以搞一下

第二个问题:关于文件下载时中文文件名乱码的问题,通过上面注解的解决方式已经解决不了问题了,以上是针对json的,将json的格式更改为html格式来保全的,浏览器下载乱码主要是不同的浏览器内核不同,编码不同,所以要针对不同的浏览器来进行不同的编码

    ie采用URLEncoder编码输出中文

    opera采用filename

    safari采用iso-8859-1

    chrome采用base64或iso-8859-1

    firefox采用base64或iso-8859-1

//获取用户浏览器信息
String Agent = request.getHeader("User-Agent"); 
	if (null != Agent) { 
		Agent = Agent.toLowerCase(); 
		if (Agent.indexOf("firefox") != -1) { //针对火狐
			excelName = new String(excelName.getBytes(),"iso8859-1"); 
		} else if (Agent.indexOf("msie") != -1) { 
			excelName = URLEncoder.encode(excelName,"UTF-8");//针对IE 
		} else { 
			excelName = URLEncoder.encode(excelName,"UTF-8"); //针对谷歌
		} 
	}
response.addHeader("Content-Disposition","attachment;filename=" + excelName); 
//-----------------------------------分割线有这么长-----------------------------------------
//如果对浏览器的要求不高,可以直接这样
if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {  
    excelName = URLEncoder.encode(excelName, "UTF-8");  //IE浏览器
} else {  
    excelName = new String(excelName.getBytes("UTF-8"), "ISO8859-1");  //谷歌火狐
}

好了,就是这个样子。

转载于:https://my.oschina.net/ytliyang/blog/651153

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值