第一個問題:介紹兩種解決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"); //谷歌火狐 }
好了,就是這個樣子。