getParameter方法的中文問題【轉】
終於找到了中文亂碼的解決方法,摘錄如下:
ServletRequest介面中定義了一個getCharacterEncoding方法,該方法用於返回請求訊息中的實體內容的字符集編碼名稱。如果請求訊息中沒有指定實體內容的字符集編碼名稱,則getCharacterEncoding方法返回null。
ServletRequest介面中定義了一個 setCharacterEncoding方法,該方法用於覆蓋請求訊息中的實體內容的字符集編碼名稱的設定。getParameter和getReader方法將讀取到的實體內容從位元組陣列形態轉換成字串返回時,都要參照請求訊息中的實體內容的字符集編碼名稱,所以,setCharacterEncoding方法應早於getParameter或getReader方法之前進行呼叫。
ServletRequest物件的getParameter等方法以哪種字符集編碼對引數進行URL編碼,需記下以下三種情況:
(1) 對於HTTP請求訊息的請求行中的URL地址後的引數,getParameter等方法進行URL解碼時所採用的字符集編碼在Servlet規範中沒有明確規定,它由各個Servlet引擎廠商自行決定。對於這種情況,Tomcat中的ServletRequest物件的getParameter等方法預設採用ISO8859-1字符集編碼進行URL解碼,因此無法返回正確的中文引數資訊。
(2) 對於POST方式下的”application/x-www-form-urlencoded”編碼格式的實體內容,getParameter等方法以ServletRequest物件的getCharacterEncoding方法返回的字符集編碼對其進行URL解碼。事實上,對於IE瀏覽器產生的HTTP請求訊息中沒有通過任何方式指定對實體內容進行URL編碼所採用的字符集編碼,那麼,Servlet引擎將無法知道請求訊息中的實體內容的字符集編碼,getCharacterEncoding()方法的返回值為null。對於這種情況,ServletRequest物件的getParameter等方法將使用預設的ISO8859-1字符集編碼對實體內容中的引數進行URL解碼,因此也將無法返回正確的中文引數資訊。
(3) ServletRequest介面中定義了一個 setCharacterEncoding方法來設定請求訊息中的實體內容的字符集編碼名稱,getParameter方法將以該方法設定的字符集編碼對實體內容進行URL解碼,所以,只要使用ServletRequest.setCharacterEncoding方法設定實體內容的字符集編碼為其URL編碼前的字符集編碼,那麼getParameter方法就可以從實體內容返回正確的中文引數資訊。但是,應該注意一點:ServletRequest.setCharacterEncoding方法設定的是請求訊息中的實體內容的字符集編碼名稱,它隻影響getParameter方法對POST方式下的”application/x-www-form-urlencoded”編碼格式的實體內容進行URL解碼的結果,而不能影響getParameter方法對HTTP請求訊息的請求行中的URL地址後的引數進行URL解碼的結果。
以上摘自:張孝祥《深入體驗Java Web開發內幕—核心基礎》電子工業出版社 06/10
例如:
請求: search/index.jsp?q=中國
得到引數:
String q = request.getParameter("q");
q = new String(q.getBytes("ISO-8859-1"), "GBK");//字元轉換
System.out.println(q);//顯示“中國”
ServletRequest介面中定義了一個getCharacterEncoding方法,該方法用於返回請求訊息中的實體內容的字符集編碼名稱。如果請求訊息中沒有指定實體內容的字符集編碼名稱,則getCharacterEncoding方法返回null。
ServletRequest介面中定義了一個 setCharacterEncoding方法,該方法用於覆蓋請求訊息中的實體內容的字符集編碼名稱的設定。getParameter和getReader方法將讀取到的實體內容從位元組陣列形態轉換成字串返回時,都要參照請求訊息中的實體內容的字符集編碼名稱,所以,setCharacterEncoding方法應早於getParameter或getReader方法之前進行呼叫。
ServletRequest物件的getParameter等方法以哪種字符集編碼對引數進行URL編碼,需記下以下三種情況:
(1) 對於HTTP請求訊息的請求行中的URL地址後的引數,getParameter等方法進行URL解碼時所採用的字符集編碼在Servlet規範中沒有明確規定,它由各個Servlet引擎廠商自行決定。對於這種情況,Tomcat中的ServletRequest物件的getParameter等方法預設採用ISO8859-1字符集編碼進行URL解碼,因此無法返回正確的中文引數資訊。
(2) 對於POST方式下的”application/x-www-form-urlencoded”編碼格式的實體內容,getParameter等方法以ServletRequest物件的getCharacterEncoding方法返回的字符集編碼對其進行URL解碼。事實上,對於IE瀏覽器產生的HTTP請求訊息中沒有通過任何方式指定對實體內容進行URL編碼所採用的字符集編碼,那麼,Servlet引擎將無法知道請求訊息中的實體內容的字符集編碼,getCharacterEncoding()方法的返回值為null。對於這種情況,ServletRequest物件的getParameter等方法將使用預設的ISO8859-1字符集編碼對實體內容中的引數進行URL解碼,因此也將無法返回正確的中文引數資訊。
(3) ServletRequest介面中定義了一個 setCharacterEncoding方法來設定請求訊息中的實體內容的字符集編碼名稱,getParameter方法將以該方法設定的字符集編碼對實體內容進行URL解碼,所以,只要使用ServletRequest.setCharacterEncoding方法設定實體內容的字符集編碼為其URL編碼前的字符集編碼,那麼getParameter方法就可以從實體內容返回正確的中文引數資訊。但是,應該注意一點:ServletRequest.setCharacterEncoding方法設定的是請求訊息中的實體內容的字符集編碼名稱,它隻影響getParameter方法對POST方式下的”application/x-www-form-urlencoded”編碼格式的實體內容進行URL解碼的結果,而不能影響getParameter方法對HTTP請求訊息的請求行中的URL地址後的引數進行URL解碼的結果。
以上摘自:張孝祥《深入體驗Java Web開發內幕—核心基礎》電子工業出版社 06/10
例如:
請求: search/index.jsp?q=中國
得到引數:
String q = request.getParameter("q");
q = new String(q.getBytes("ISO-8859-1"), "GBK");//字元轉換
System.out.println(q);//顯示“中國”
相關文章
- Java中文問題詳解(轉)Java
- CentOS中文亂碼問題的解決方法CentOS
- StreamWriter輸出中文亂碼的問題 (轉)
- Resin的中文問題最簡單的解決方法
- JAVA中文比較問題的分析和解決 (轉)Java
- JAVA常見中文問題的解決方案(轉)Java
- mysql的中文問題MySql
- Mysql中文亂碼問題的最佳解決方法MySql
- Tomcat中文亂碼問題的原理和解決方法Tomcat
- 讀mysql中文亂碼問題解決方法MySql
- 包含中文字元的URL編碼問題(轉)字元
- JSP顯示中文問題的解決方案(轉)JS
- 解決中文問題的幾個常用的函式 (轉)函式
- 如何解決無法解析 JSP 中的方法 getParameter()JS
- JSP中String a = request.getParameter(“ “),判斷a是否為null或空的問題JSNull
- JSF的中文問題JS
- 請教FOP轉換pdf時中文問題
- ATL元件中文路徑註冊問題 (轉)元件
- Java中文問題詳解(高手必讀) (轉)Java
- Solaris中文語言包問題終結(轉)
- request.getParameter()與request.setAttribute()的區別(轉)
- java 中文問題Java
- 中文排序 問題排序
- 關於JDK1.2的JDBC中文問題的解決 (轉)JDKJDBC
- Tomcat5+Mysql中文亂碼問題的解決方法TomcatMySql
- jboss下mysql的中文問題MySql
- 抓狂的ibatis中文問題BAT
- JAVA的中文編碼問題Java
- Linux中文亂碼問題終極解決方法Linux
- mysql 報錯json字串 中文漢字轉義的問題MySqlJSON字串
- JDK1.2關於JDBC中文問題的解決方案 (轉)JDKJDBC
- JavaMail中文附件的處理方法 (轉)JavaAI
- getAttribute和getParameter的區別
- 解決localdb中文智慧的問題
- Python的中文編碼問題Python
- 暫時解決的中文問題
- IT專案管理:問題、體系、方法(轉)專案管理
- 專案管理過程中的問題分析方法(轉)專案管理