TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
. @7 @; q, j4 o- G" t0 H* b$ q" e9 d* D4 e: V
; g S7 k: a0 A! E
今天上午 做验证码的功能、碰巧是中文验证码、明明输入对了结果一直提示验证码错误、后台打印下 结果是乱码、检查了一下web.xml 也是配置了字符过滤器。% q e4 T2 F- J/ c3 X+ Y: ?+ @
" }5 f0 h# b% V4 f8 R( R7 F! D
; b/ [0 H, t9 M2 ^5 z, c7 K/ A% ?由于其他地方 也是用了ajax 但是提交中文时没有问题的、对比一下结果发现 type 类型不一样、前者是post请求后者是get请求(乱码)。0 ?) r. R( `- A' b$ f
0 b: q9 V+ @( l" A2 y
8 K: U0 A3 B. E2 z2 A
百度了一下 get 和post请求的区别:
9 l7 i/ t! d3 H, E( @/ C对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题
1 o. U% v( R5 z s request.setCharacterEncoding("utf-8");
( K7 ?" M. `; w; w3 [而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上面的处理方法。应该这样:5 w+ }/ E6 U1 m- ]3 L
String str=request.getQueryString();' e4 [$ W( e& d- n. N, l
//使用URLDecoder解码字符串
- B( L' d2 R6 k) ? String str1=java.net.URLDecoder.decode(str,"utf-8");- a% T- \6 V% C
String[] paraStrings=str1.split("&");
2 g! A* n, s5 {4 A, r5 K //paraStrings[0]就是第一个参数,依次类推...+ K$ F- }, `( T+ \
for(String paraString : paraStrings)
! X" s7 k. [* w% |& R; p, G{
" @# R2 u- A9 D" R3 [- i String[] nameValue=paraString.split("=");
3 K3 k( w- q+ p: I //nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值. r* {* `1 w& I8 b
}) S5 e' i! i* X& z3 S* p
还有一种方法就是获取请求参数之后对请求参数值重新编码,也就是先将其转换成字节数组,再将字节数组重新解码成字符串。
8 H6 N4 W5 w$ t% |3 ^4 D# ^ String str=request.getParameter("name");
% g9 p1 A5 ?- t4 W byte[] bytes=str.getBytes("ISO-8859-1");
) }' e2 [5 A; Y String name=new String(bytes,"utf-8");1 x# v( }" i% E
& m$ k) e4 F; u) T- A! f+ _所以get即使走过滤器 解码方式也是不一样的 所以导致乱码 改为post请求就ok了。* E. K. V" [9 S
' [0 J8 J& |4 g* x9 u& |& M5 C
|
|