TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
6 z% a7 u1 S: J$ L# l8 n( T
, q/ ?1 I! g! v" a: a7 S( s
2 I l" r+ T8 t! k5 u5 T2 X今天上午 做验证码的功能、碰巧是中文验证码、明明输入对了结果一直提示验证码错误、后台打印下 结果是乱码、检查了一下web.xml 也是配置了字符过滤器。
) \5 @) U( w5 z) H# G5 c! Y/ R# G+ a+ h1 a& C7 o# b" C; C
; _# W% Y- ]& R" h6 v% i1 n5 H/ q
由于其他地方 也是用了ajax 但是提交中文时没有问题的、对比一下结果发现 type 类型不一样、前者是post请求后者是get请求(乱码)。
! |* m0 R. y$ o# g# A g; S0 M) D2 ?# h; l
6 ^5 U, i, y- {百度了一下 get 和post请求的区别:, S* s1 S7 g) p! I+ ?
对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题/ {6 n+ n0 w% C1 T
request.setCharacterEncoding("utf-8");4 b% ~! A! Z) G+ B# p+ ]* e
而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上面的处理方法。应该这样:
; L) K% ]8 J |8 ]; d8 ~$ C String str=request.getQueryString();
2 t2 y' {- `" j- @6 P+ P //使用URLDecoder解码字符串
% g' |% Q5 A0 r5 a- V! X7 p4 G! _ String str1=java.net.URLDecoder.decode(str,"utf-8");
4 z" R# y% g5 q String[] paraStrings=str1.split("&");
- o$ \4 |) x( I. R& m //paraStrings[0]就是第一个参数,依次类推.../ p# u a) m! p* K
for(String paraString : paraStrings)
( ^" V9 g) \! e" o- u- f% M{3 o, b+ G! M( V1 p- Z! s+ @9 I
String[] nameValue=paraString.split("=");) g3 |' Z( \ w$ r
//nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值+ B. E; g- R- V) W: ^# t/ @' W/ O
}% X) ?* p1 ^( ^; y8 K9 k3 O+ q
还有一种方法就是获取请求参数之后对请求参数值重新编码,也就是先将其转换成字节数组,再将字节数组重新解码成字符串。
5 o# t. e9 a, ^' w" q% @ String str=request.getParameter("name");5 }0 S5 h9 x- E; a3 S/ {7 v
byte[] bytes=str.getBytes("ISO-8859-1");
0 p2 h8 }8 r$ r& c! C0 @$ w" s String name=new String(bytes,"utf-8");
2 n- Y% v9 K, W% T+ m/ [# d
4 p" H5 r3 f) _$ i& p所以get即使走过滤器 解码方式也是不一样的 所以导致乱码 改为post请求就ok了。8 W3 U I) x' T7 p! g# H
, o$ K( d [+ A, t# m/ D% [" A |
|