關於請求參數編碼處理

1.請求參數亂碼現象的產生

當客戶端使用編碼與web容器使用編碼不一致時,便有可能產生亂碼狀況java


例一:網頁編碼使用UTF-8,經過Post方式發出「晴」這個中文字符的參數請求。web容器使用ISO-8859-1處理編碼。web

至關於瀏覽器所作操做:數組

java.net.URLEncoder.encode("晴", "UTF-8");複製代碼

「晴」按照UTF-8編碼爲:%E6%99%B4瀏覽器

則至關於web容器所作操做:bash

java.net.URLDecoder.decode("%E6%99%B4" , "ISO-8859-1");複製代碼

故此會出現請求參數亂碼現象ide


2.Post請求參數編碼處理

在接受任何請求參數以前,執行如下語句(request爲HttpServletRequest實例化對象):this

request.setCharacterEncoding("UTF-8");
複製代碼

使得容器在接受任何請求參數時,使用UTF-8來處理。便可解決亂碼問題編碼


3.Get請求參數編碼處理

request.setCharacterEncoding("UTF-8");
複製代碼

以上語句對於Get請求參數亂碼問題並不起做用。spa

why?.net

在API中,該方法有以下說明:

Overrides the name of the character encoding used in the body of this request

該方法只對請求體中的字符編碼起效。故在Get請求時,它並不能解決問題。


依舊針對例一,換做爲Get請求,正確的處理方式如爲:

String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
複製代碼

首先經過StringgetBytes()得到該字符串的字節數組,再從新構造正確編碼的字符串便可。

相關文章
相關標籤/搜索