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

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

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

@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的格式进行更改chrome

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

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

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

    ie采用URLEncoder编码输出中文
app

    opera采用filename编码

    safari采用iso-8859-1firefox

    chrome采用base64或iso-8859-1excel

    firefox采用base64或iso-8859-1code

//获取用户浏览器信息
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");  //谷歌火狐
}

好了,就是这个样子。

相关文章
相关标签/搜索