TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
2 S, R0 Y4 _6 o* Z+ m
( j6 d4 `& F5 q
* M; M7 z h5 ]& M" p. ]! `' |今天上午 做验证码的功能、碰巧是中文验证码、明明输入对了结果一直提示验证码错误、后台打印下 结果是乱码、检查了一下web.xml 也是配置了字符过滤器。
y1 g, r! B7 Q, T1 R3 t; m0 L! F# R5 ^
/ y9 r2 h! A: d( C
由于其他地方 也是用了ajax 但是提交中文时没有问题的、对比一下结果发现 type 类型不一样、前者是post请求后者是get请求(乱码)。% D& O/ Q4 C- @ r
* n# r5 `( L5 k3 |- V7 Q
- h8 w: ~! p5 L8 d. ?8 ]$ O百度了一下 get 和post请求的区别:2 D! q1 ~% F2 _; n: u+ O8 B: Q
对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题, t7 D% a+ ]) M! H- @7 I$ T! e
request.setCharacterEncoding("utf-8");5 d+ p9 U; Z2 y( j+ M
而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上面的处理方法。应该这样:
8 v( M* \0 q8 E; | String str=request.getQueryString();3 C" Q( N: c& y& o( G
//使用URLDecoder解码字符串
+ h/ c" |/ [4 n/ ?" |% G! g) @ String str1=java.net.URLDecoder.decode(str,"utf-8");, E; f% J9 f# S, g9 l7 O$ d
String[] paraStrings=str1.split("&");' D$ B H! y* h! S
//paraStrings[0]就是第一个参数,依次类推...6 i4 v. T. d3 m' |6 ]
for(String paraString : paraStrings); j, l) l1 k- u, U5 Q& M
{
* G8 J( ?! D! C2 B) |6 |: T String[] nameValue=paraString.split("=");
: t$ @1 p7 T( U/ V2 d X! w- B //nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值1 E4 z4 a6 d: R! }* G
}
' V8 ^5 S, @# L) C! {0 L还有一种方法就是获取请求参数之后对请求参数值重新编码,也就是先将其转换成字节数组,再将字节数组重新解码成字符串。
( f2 u7 O: e. F# w a, t }0 u String str=request.getParameter("name");
) f5 f! L8 q( |/ i; ?9 _1 d! G4 { byte[] bytes=str.getBytes("ISO-8859-1");& k! A. D8 V& T
String name=new String(bytes,"utf-8");+ l" U A# n8 A8 a) v
! \ C: c7 O$ u所以get即使走过滤器 解码方式也是不一样的 所以导致乱码 改为post请求就ok了。
* \1 p% v, }% u% V! E
4 _% _" u2 v* i' I- }1 {) r5 A |
|