HttpServletResponse.getWriter().print乱码,request.getHeader乱码,解决方法
1、添加響應(yīng)類型即可
//這句話的意思,是讓瀏覽器用utf8來解析返回的數(shù)據(jù)
?? ??? ?response.setHeader("Content-type", "text/html;charset=UTF-8");
添加前后:
?
如果是header參數(shù)亂碼,解決方法如下:
HTTP Header 的編解碼
當(dāng)客戶端發(fā)起一個(gè) HTTP 請(qǐng)求除了上面的 URL 外還可能會(huì)在 Header 中傳遞其它參數(shù)如 Cookie、redirectPath 等,這些用戶設(shè)置的值很可能也會(huì)存在編碼問題,Tomcat 對(duì)它們又是怎么解碼的呢?
對(duì) Header 中的項(xiàng)進(jìn)行解碼也是在調(diào)用 request.getHeader 是進(jìn)行的,如果請(qǐng)求的 Header 項(xiàng)沒有解碼則調(diào)用 MessageBytes 的 toString 方法,這個(gè)方法將從 byte 到 char 的轉(zhuǎn)化使用的默認(rèn)編碼也是 ISO-8859-1,而我們也不能設(shè)置 Header 的其它解碼格式,所以如果你設(shè)置 Header 中有非 ASCII 字符解碼肯定會(huì)有亂碼。
我們?cè)谔砑?Header 時(shí)也是同樣的道理,不要在 Header 中傳遞非 ASCII 字符,如果一定要傳遞的話,我們可以先將這些字符用 org.apache.catalina.util.URLEncoder 編碼然后再添加到 Header 中,這樣在瀏覽器到服務(wù)器的傳遞過程中就不會(huì)丟失信息了,如果我們要訪問這些項(xiàng)時(shí)再按照相應(yīng)的字符集解碼就好了。
?
?
附:URLEncoder 、URLDecoder 轉(zhuǎn)碼解碼使用
傳遞參數(shù),轉(zhuǎn)碼傳遞
String encodeStr = null; try {encodeStr = URLEncoder.encode("aabb22中國", "utf-8"); } catch (UnsupportedEncodingException e) {e.printStackTrace(); } System.out.println("lgq處理后:" + encodeStr);client.addHeader("headkey", encodeStr);//添加header請(qǐng)求參數(shù)方法接收參數(shù),解碼顯示
String name=(String) request.getHeader("headkey");
?? ??? ??? ??? ?String decodeStr = URLDecoder.decode(name, "utf-8"); ?
?? ??? ??? ??? ?
?? ??? ??? ??? ?System.out.println("hhhhhhhhhhhhhhhhh=====發(fā) 的==="+decodeStr);//獲取header請(qǐng)求參數(shù)
結(jié)果:
hhhhhhhhhhhhhhhhh=====發(fā) 的===aabb22中國
?
總結(jié)
以上是生活随笔為你收集整理的HttpServletResponse.getWriter().print乱码,request.getHeader乱码,解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一键去除网页BOM属性【解决乱码,头部空
- 下一篇: TortoiseGit不同分支合并代码