1. 程式人生 > >解決為什麽已經設置了request.setCharacterEncoding("utf-8");POST請求仍然亂碼的問題

解決為什麽已經設置了request.setCharacterEncoding("utf-8");POST請求仍然亂碼的問題

csdn etc enc param pan 輸出 無效 處理方法 meta

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請求仍然亂碼的問題