request.setCharacterEncoding(charset);必須寫在第一次使用request.getParameter()之前,這樣才能保證參數(shù)是按照已經(jīng)設(shè)置的字符編碼來(lái)獲取。
response.setCharacterEncoding(charset);必須寫在PrintWriter out = request.getWriter()之前,這樣才能保證out按照已經(jīng)設(shè)置的字符編碼來(lái)進(jìn)行字符輸出。 通過(guò)過(guò)濾器,我們可以保證在Servlet或JSP執(zhí)行之前就設(shè)置好了請(qǐng)求和響應(yīng)的字符編碼。
但是這樣并不能完全解決中文亂碼問(wèn)題: 對(duì)于post請(qǐng)求,無(wú)論是“獲取參數(shù)環(huán)節(jié)”還是“輸出環(huán)節(jié)"都是沒(méi)問(wèn)題的; 對(duì)于get請(qǐng)求,"輸出環(huán)節(jié)"沒(méi)有問(wèn)題,但是"獲取參數(shù)環(huán)節(jié)"依然出現(xiàn)中文亂碼,所以在輸出時(shí)直接將亂碼輸出了。
原因是post請(qǐng)求和get請(qǐng)求存放參數(shù)位置是不同的: post方式參數(shù)存放在請(qǐng)求數(shù)據(jù)包的消息體中。get方式參數(shù)存放在請(qǐng)求數(shù)據(jù)包的請(qǐng)求行的URI字段中,以?開(kāi)始以param=value¶me2=value2的形式附加在URI字段之后。而request.setCharacterEncoding(charset); 只對(duì)消息體中的數(shù)據(jù)起作用,對(duì)于URI字段中的參數(shù)不起作用。 當(dāng)使用request.setCharacterEncoding(charset);時(shí),只能解決表單方法為POST的中文亂碼情況,而方法為GET的依然為亂碼。 解決GET亂碼: String str = request.getParameter("URL后面的變量名"); byte b[] = str.getBytes("ISO-8859-1"); str = new String(b); |
|
來(lái)自: 昵稱15242507 > 《員工考試》