TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
4 W8 x4 [; {2 H' j- l2 P d
% D! I+ X/ D( l5 c
+ X- m8 |7 I7 \. o1 g
今天上午 做验证码的功能、碰巧是中文验证码、明明输入对了结果一直提示验证码错误、后台打印下 结果是乱码、检查了一下web.xml 也是配置了字符过滤器。. C: I- q) F5 n, x5 ~6 t
& n9 [; x8 s. v1 g; F% A* ]
9 ]9 q3 ]$ i0 }* N; K% W由于其他地方 也是用了ajax 但是提交中文时没有问题的、对比一下结果发现 type 类型不一样、前者是post请求后者是get请求(乱码)。
4 J1 h. x" K. W$ b* v$ r
4 ~5 V* _; c# g
1 H# u# x+ u3 ^; v百度了一下 get 和post请求的区别:
! f- J: j$ K8 w& G7 \ b; J5 e对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题# ~% v* ^0 T( P5 P7 f+ C! x& v
request.setCharacterEncoding("utf-8");
0 V+ l& W8 B. u1 \/ z而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上面的处理方法。应该这样:. z- S' z; Y$ S6 X2 C5 n0 N/ W$ q
String str=request.getQueryString();
* {( Q- i. _! M //使用URLDecoder解码字符串7 X( U- H3 H* F+ A& k6 Y! T' d0 s
String str1=java.net.URLDecoder.decode(str,"utf-8");- ]9 [( y" g' c1 c- P
String[] paraStrings=str1.split("&");
% Y. k2 I0 x1 j8 |' H* P //paraStrings[0]就是第一个参数,依次类推..." `2 I' F1 L8 n. }8 d; ?
for(String paraString : paraStrings)8 Q7 @7 o% B8 u: v6 P& a" S3 ^7 L
{ A$ c4 B6 ~3 w4 J) F6 m
String[] nameValue=paraString.split("=");
; X2 J! ?. z% l6 x4 z //nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值* J z8 _# Y, T2 S' V- M! d; f7 `
}9 \0 {8 M$ }7 c; U8 Z+ X, b$ @
还有一种方法就是获取请求参数之后对请求参数值重新编码,也就是先将其转换成字节数组,再将字节数组重新解码成字符串。* p, L! H8 C5 k9 ]" X, i V
String str=request.getParameter("name");
) ?- E$ m% Z/ w8 W: y" I byte[] bytes=str.getBytes("ISO-8859-1");' b5 g; Z N& ]9 ?; W
String name=new String(bytes,"utf-8");6 e6 A2 W% Q" f0 P+ g1 I; H4 }
3 E5 x9 f Y. P8 X( e' c
所以get即使走过滤器 解码方式也是不一样的 所以导致乱码 改为post请求就ok了。, w2 [ O! Y. [# o
D6 Y6 [& f( M, M+ t! [
|
|