解決為什麽已經設置了request.setCharacterEncoding("utf-8");POST請求仍然亂碼的問題
request.setCharacterEncoding("utf-8");應該在獲取請求參數之前設置
在 http://bbs.csdn.net/topics/380124606 和 http://bbs.csdn.net/topics/370125113 找到的答案
由於POST傳來數據,Tomcat默認以ISO-8859-1編碼成單字節數據,若沒有進行請求編碼設置或重新編碼操作,那麽中文字符會在jsp頁面中輸出???,出現類似多個?形式的亂碼現象。
測試發現,盡管jsp頁面contentType和content均進行了下述設置,表單還是亂碼
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> page指令用於定義JSP頁面的各種屬性
contentType:文檔類型
pageEncoding:頁面編碼
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 元素可提供有關頁面的元信息
http-equiv:把 content 屬性關聯到 HTTP 頭部
content:定義與 http-equiv 或 name 屬性相關的元信息)
測試將表單method設置get,正常顯示中文字符,這是由於Tomcat8之後,get請求默認編碼為utf-8,不需要進行重新編碼。
解決方式一:
進行請求編碼設置,這是最簡單的,需要註意的問題就是不要在獲取請求參數之後設置請求編碼
若已獲取請求參數,此時還沒有設置過編碼,Tomcat會設置默認Post請求參數編碼為ISO8859_1,那麽你再設置成UTF-8也無效了,還是ISO-8859-1
解決方式二:
類似與之前get請求的處理方法,先解碼,再編碼
String str = new String(getParameter("message").getBytes("ISO-8859-1"),"UTF-8");
這裏 http://cosmo1987.iteye.com/blog/1116959 有關於編碼格式設置的一些認識。
解決為什麽已經設置了request.setCharacterEncoding("utf-8");POST請求仍然亂碼的問題