TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
8 E- i0 x; O/ l$ { ?, u: ?- K
5 D8 b( W% w, k* v7 O( e
0 A% g. i3 H b; ?8 l: C1 R今天上午 做验证码的功能、碰巧是中文验证码、明明输入对了结果一直提示验证码错误、后台打印下 结果是乱码、检查了一下web.xml 也是配置了字符过滤器。/ X. [- l8 z6 b8 M3 t6 K
6 v3 I* k5 e) {7 H: A
- c& Y" [5 u/ v9 J! Z由于其他地方 也是用了ajax 但是提交中文时没有问题的、对比一下结果发现 type 类型不一样、前者是post请求后者是get请求(乱码)。$ M" x: `0 h/ ~* B
: q/ p5 \2 {* C! f0 ?8 D* U' r7 u1 [" X2 }- {( l; S
百度了一下 get 和post请求的区别:
f+ C& g T* @. d8 D# d对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题9 i" e5 @- l3 G9 u- t: m
request.setCharacterEncoding("utf-8");+ {9 @# t( o4 T
而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上面的处理方法。应该这样:
0 A" |/ [% _8 a/ s String str=request.getQueryString();
# ~7 ^! b4 A, O6 j //使用URLDecoder解码字符串
5 J) e* C2 O# O2 V! q6 T6 P$ u String str1=java.net.URLDecoder.decode(str,"utf-8"); j) l& ?' X( x
String[] paraStrings=str1.split("&");
! n6 Y% w; a4 u //paraStrings[0]就是第一个参数,依次类推...
/ S* }; b1 f) a% U for(String paraString : paraStrings)
: L. i; D0 N3 _5 {# t{% a% j h _6 Z ]/ W
String[] nameValue=paraString.split("=");
: ]4 W) F/ S2 M //nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值: c( C$ R+ R" m8 T3 y5 A
}9 g: }' \ x, B: A
还有一种方法就是获取请求参数之后对请求参数值重新编码,也就是先将其转换成字节数组,再将字节数组重新解码成字符串。
& ?( V. H- t1 o String str=request.getParameter("name");
% A% p9 l4 U: i" h( D6 z6 a byte[] bytes=str.getBytes("ISO-8859-1");
) z: K- g) R( B" e* B _- n8 k( F String name=new String(bytes,"utf-8");% Q$ |. O: A2 |' w
: @6 o8 }- X2 w. g$ _3 y6 q所以get即使走过滤器 解码方式也是不一样的 所以导致乱码 改为post请求就ok了。
" S; T5 x6 U9 N5 {% X6 u0 @# a
2 K: y% Q0 @; e' }9 k# Q, l O |
|