TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
3 P( c3 u; u5 D( y" V# `
3 V* ]3 Q: t2 w
! }; E" R% R; S) t1 W
今天上午 做验证码的功能、碰巧是中文验证码、明明输入对了结果一直提示验证码错误、后台打印下 结果是乱码、检查了一下web.xml 也是配置了字符过滤器。
# ]8 A* i6 y0 ]! s4 D( `# \) n6 S* _* {7 X2 L
. p, J& D# q S) F* p! V" A% q
由于其他地方 也是用了ajax 但是提交中文时没有问题的、对比一下结果发现 type 类型不一样、前者是post请求后者是get请求(乱码)。8 s1 x# E: R# K+ q" A
6 _* H& Y: L" e; [, f E+ w
' V0 A2 |% a- n3 z' C$ k2 `; A+ h2 I
百度了一下 get 和post请求的区别:
) B3 k& [: R' j% ]4 h对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题6 `& P( e: _( a* l$ j. ]: V
request.setCharacterEncoding("utf-8");
" Q+ y& L& R" T% K而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上面的处理方法。应该这样:
% P8 J; ]% D( W ^+ V String str=request.getQueryString();, A1 N, I7 ]$ l5 e6 _% K* m6 K* m
//使用URLDecoder解码字符串5 g) q% G+ G1 z: i4 U6 ?7 l
String str1=java.net.URLDecoder.decode(str,"utf-8");
2 b% |# z0 J9 q4 n String[] paraStrings=str1.split("&");
* n& u; \; r, W; Q9 W //paraStrings[0]就是第一个参数,依次类推...
' c' o1 P/ e6 r: V6 D+ [$ Q for(String paraString : paraStrings)
) Z: T4 Q) C; }( z; ]6 }6 h" o{5 Z3 o2 P2 Y$ F8 H! N5 t! i
String[] nameValue=paraString.split("=");; \. K- T4 ~* i% n3 t$ N2 Q
//nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值5 U1 C5 H" ?, O
}
~3 ^" F4 }$ a7 M还有一种方法就是获取请求参数之后对请求参数值重新编码,也就是先将其转换成字节数组,再将字节数组重新解码成字符串。; C1 j7 s/ [% l
String str=request.getParameter("name");0 @3 j- Z) G* T/ d" Y
byte[] bytes=str.getBytes("ISO-8859-1");
7 _! c4 F# ]: y4 O* J5 { String name=new String(bytes,"utf-8");
' }2 f6 W& _6 t0 H' w3 h9 u! Z3 Q9 f& g" X
所以get即使走过滤器 解码方式也是不一样的 所以导致乱码 改为post请求就ok了。
" \" {& ^: ?1 [. t' q
+ {. O' [2 m( K: g: V |
|