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