TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
' I4 |9 r0 y1 o' h$ t& o/ z
J! L; z; W$ H C2 ]" ^
3 L1 }8 M- @! a7 s/ k* R
今天上午 做验证码的功能、碰巧是中文验证码、明明输入对了结果一直提示验证码错误、后台打印下 结果是乱码、检查了一下web.xml 也是配置了字符过滤器。
# v% F/ f' Z: P( b: W3 ]- w
, M2 q$ @8 q. b9 G) o+ l8 F( R: V$ v1 W+ _
由于其他地方 也是用了ajax 但是提交中文时没有问题的、对比一下结果发现 type 类型不一样、前者是post请求后者是get请求(乱码)。4 ?; a* ~- a3 Z
2 ]( m% F7 j6 s p% f1 D
- a+ P2 l; @. @ [1 A8 x0 l0 }百度了一下 get 和post请求的区别:
9 S2 g9 x0 C+ e1 ?对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题
, U0 m6 z5 B& r" P( |- K request.setCharacterEncoding("utf-8");# l4 M1 f3 _. D; C! R z/ Z0 S: g
而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上面的处理方法。应该这样:
5 I0 Q ~* L, I- ]* f String str=request.getQueryString(); ]$ g Q$ O) |0 }: k1 v6 T
//使用URLDecoder解码字符串# x* x- Y- ?2 W
String str1=java.net.URLDecoder.decode(str,"utf-8");% N6 A* k, b6 u+ X% j* z
String[] paraStrings=str1.split("&");
' D F8 [% K: g& s: p: D, q //paraStrings[0]就是第一个参数,依次类推...
# q* |" E, o/ I% O1 J4 x! } for(String paraString : paraStrings)+ M7 e: W" V0 O+ J: E
{8 f! a3 R+ D) z
String[] nameValue=paraString.split("=");* y9 ^& n0 {- \4 G/ A% A4 g; G
//nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值3 z& c0 f. s' [2 h& B
}
- e2 q! r9 V% _( J' u& F r还有一种方法就是获取请求参数之后对请求参数值重新编码,也就是先将其转换成字节数组,再将字节数组重新解码成字符串。! f; P; `0 ^4 ]* q
String str=request.getParameter("name");
/ X9 c9 h" R* z; e5 _% H byte[] bytes=str.getBytes("ISO-8859-1");
; R( w, W$ e% ?/ x String name=new String(bytes,"utf-8");
4 H* N) W; V6 h2 j) h% K) W- Q% h! G% R& k' J; K" |8 F. z$ ~
所以get即使走过滤器 解码方式也是不一样的 所以导致乱码 改为post请求就ok了。5 B- D# S+ m4 s; y; a) {2 t
: z$ U. a0 _8 ~$ m5 i
|
|