【Servlet】HTTP请求中文乱码的问题
請求中文亂碼
在進行請求參數傳遞時,經常會遇到請求數據為中文時的亂碼問題,當Form表單的文本域中輸入中文時會產生亂碼問題,出現(xiàn)亂碼的原因與客戶端的請求編碼方式(GET請求或POST請求)以及服務器的處理編碼方式有關。
POST請求亂碼
瀏覽器會按當前顯示頁面所采用的字符集對請求的中文數據進行編碼,而后再以報文體的形式傳送給服務器,Servlet在調用getParameter()方法獲取參數時,會以HttpServletRequest對象的getCharacterEncoding()方法返回的字符集對其進行解碼,而該方法的返回值在未經過setCharacterEncoding(charset)方法設置編碼的情況下為null,這時getParameter()方法將以服務器默認的“ISO-8859-1”字符集對參數進行解碼,而“ISO-8859-1”字符集并不包含中文,于是造成中文參數的亂碼問題。
解決辦法:
在調用getParameter()方法前先調用setCharacterEncoding(charset)方法設定與頁面請求編碼相同的解碼字符集。
GET請求亂碼
GET請求參數以“?”或“&”為連接字符附加在URL地址后,根據網絡標準RFC1738規(guī)定,只有字母和數字以及一些特殊符號和某些保留字才可以不經過編碼直接用于URL,因此在請求參數為中文時必須先由瀏覽器進行編碼后才能發(fā)送給服務器,服務器端對GET請求參數依照服務器本身默認的字符集進行解碼。
在服務器端,由于GET請求參數是作為請求行發(fā)送給服務器的,因此Servlet在通過getParameter()獲取請求參數時,并不能使用setCharacterEncoding(charset)方法指定的字符集進行解碼,而是依照服務器本身默認的字符集進行解碼。
Tomcat服務器各版本中默認的URIEncoding字符集并不完全相同,例如,Tomcat6和Tomcat7都默認為“ISO-8859-1”,這類版本中,對于GET請求的中文參數必須經處理后才會避免亂碼問題,因此在實際開發(fā)中盡量避免使用GET請求來傳遞中文參數。
總結
以上是生活随笔為你收集整理的【Servlet】HTTP请求中文乱码的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java】时间的新旧比较
- 下一篇: 【C语言】第一章 计算机及程序设计概述