針對前臺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");  //谷歌火狐
}

好了,就是這個樣子。

相關文章
相關標籤/搜索