有个朋友写JSP
![](/icons/55056chengxu.gif)
时
![](/icons/55056dou.gif)
在Servlet中取请求参数时出现了乱码
![](/icons/55056dou.gif)
当然
![](/icons/55056dou.gif)
这种乱码问题再简单不过了
![](/icons/55056dou2.gif)
由于在JSP中使用了GBK作用页面
![](/icons/55056de.gif)
编码
![](/icons/55056dou.gif)
那么提交
![](/icons/55056de.gif)
中文信息自然也会被按着GBK进行编码
![](/icons/55056dou.gif)
为%xx格式
![](/icons/55056de.gif)
GBK编码
![](/icons/55056dou2.gif)
要解决这个问题可以说是思路方法多多
![](/icons/55056dou2.gif)
最简单
![](/icons/55056de.gif)
就是使用request.
![](/icons/55056set.gif)
CharacterEncoding思路方法设置编码格式
![](/icons/55056dou.gif)
如下面
![](/icons/55056de.gif)
代码所示:
request.
![](/icons/55056set.gif)
CharacterEncoding("GBK");
在设置完编码格式的后
![](/icons/55056dou.gif)
就可以直接通过request.getParameter思路方法来获得请求参数中
![](/icons/55056de.gif)
中文信息了
![](/icons/55056dou2.gif)
当然
![](/icons/55056dou.gif)
为了方便,还可以在过滤器中加入上面
![](/icons/55056de.gif)
语句
![](/icons/55056dou.gif)
这样所有
![](/icons/55056de.gif)
Servlet都可以直接使用 request.getParameter思路方法来获得请求参数中
![](/icons/55056de.gif)
中文信息了
![](/icons/55056dou2.gif)
除了这两种思路方法
![](/icons/55056dou.gif)
还可以不使用request.
![](/icons/55056set.gif)
CharacterEncoding("GBK")
![](/icons/55056dou.gif)
而使用下面
![](/icons/55056de.gif)
语言来转换编码:
String name =
![](/icons/55056new.gif)
String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");
但为了更快解决这个问题
![](/icons/55056dou.gif)
我就直接告诉这位朋友使用了
![](/icons/55056set.gif)
CharacterEncoding思路方法来设置编码
![](/icons/55056dou2.gif)
但是说来奇怪
![](/icons/55056dou.gif)
还是出现乱码
![](/icons/55056dou.gif)
没有任何解决问题
![](/icons/55056de.gif)
迹象
![](/icons/55056dou2.gif)
最郁闷
![](/icons/55056de.gif)
事就是使用了自己认为100%能解决问题
![](/icons/55056de.gif)
思路方法
![](/icons/55056dou.gif)
而这种思路方法却
![](/icons/55056yi.gif)
点都没起作用
![](/icons/55056dou2.gif)
最后又让朋友试了最后
![](/icons/55056yi.gif)
种思路方法
![](/icons/55056dou.gif)
说来奇怪
![](/icons/55056dou.gif)
竟然好使了
![](/icons/55056dou2.gif)
当然
![](/icons/55056dou.gif)
这也没什么可奇怪
![](/icons/55056de.gif)
![](/icons/55056dou.gif)
本来就应该好使
![](/icons/55056dou.gif)
但奇就奇在
![](/icons/55056set.gif)
CharacterEncoding思路方法并没有去掉
![](/icons/55056dou.gif)
也就是说
![](/icons/55056dou.gif)
同时使用了下面两条语句
![](/icons/55056dou.gif)
竟然得到了正常
![](/icons/55056de.gif)
中文请求参数值:
request.
![](/icons/55056set.gif)
CharacterEncoding("GBK");
String name =
![](/icons/55056new.gif)
String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");
![](/icons/55056System.gif)
.out.pr
![](/icons/55056int.gif)
ln(name); // 正常输出中文请求参数
按着常理来说
![](/icons/55056dou.gif)
这是不可能
![](/icons/55056de.gif)
![](/icons/55056dou.gif)
既然使用了
![](/icons/55056set.gif)
CharacterEncoding思路方法设置成了GBK
![](/icons/55056dou.gif)
再使用
![](/icons/55056new.gif)
String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK")来转换
![](/icons/55056dou.gif)
得到
![](/icons/55056de.gif)
应该是?????
![](/icons/55056dou.gif)
不可能是正常
![](/icons/55056de.gif)
中文
![](/icons/55056dou.gif)
只有将
![](/icons/55056set.gif)
CharacterEncoding思路方法去了
![](/icons/55056dou.gif)
以ISO-8859-1格式保存
![](/icons/55056de.gif)
![](/icons/55056zifu.gif)
串才可以用ISO-8859-1格式还原
![](/icons/55056dou.gif)
再用GBK重新保存成Java
![](/icons/55056zifu.gif)
串(这
![](/icons/55056yi.gif)
步实际上就是GBK转Unicode)
![](/icons/55056dou2.gif)
但经过仔细研究后
![](/icons/55056dou.gif)
决定看下JSP代码是如何写
![](/icons/55056de.gif)
![](/icons/55056dou2.gif)
不看不知道
![](/icons/55056dou.gif)
![](/icons/55056yi.gif)
看吓
![](/icons/55056yi.gif)
跳
![](/icons/55056dou.gif)
原来<form>在提交时使用
![](/icons/55056de.gif)
是GET
![](/icons/55056dou.gif)
而未用POST
![](/icons/55056dou.gif)
这当然没什么了不起
![](/icons/55056de.gif)
![](/icons/55056dou.gif)
用什么都可以
![](/icons/55056dou.gif)
但对编码就有问题了
![](/icons/55056dou2.gif)
自从Tomcat5.x开始
![](/icons/55056dou.gif)
GET和POST思路方法提交
![](/icons/55056de.gif)
信息
![](/icons/55056dou.gif)
Tomcat采用了区别
![](/icons/55056de.gif)
方式来处理编码
![](/icons/55056dou.gif)
对于POST请求
![](/icons/55056dou.gif)
Tomcat会仍然使用request.
![](/icons/55056set.gif)
CharacterEncoding思路方法所设置
![](/icons/55056de.gif)
编码来处理
![](/icons/55056dou.gif)
如果未设置
![](/icons/55056dou.gif)
则使用默认
![](/icons/55056de.gif)
iso-8859-1编码
![](/icons/55056dou2.gif)
而GET请求则区别
![](/icons/55056dou.gif)
Tomcat对于GET请求并不会考虑使用request.
![](/icons/55056set.gif)
CharacterEncoding思路方法设置
![](/icons/55056de.gif)
编码
![](/icons/55056dou.gif)
而会永远使用iso-8859-1编码
![](/icons/55056dou.gif)
而这位朋友使用
![](/icons/55056de.gif)
正好是GET请求
![](/icons/55056dou.gif)
因此
![](/icons/55056dou.gif)
tomcat将会使用iso-8859-1将提交
![](/icons/55056de.gif)
字节转换成
![](/icons/55056zifu.gif)
串
![](/icons/55056dou2.gif)
解决
![](/icons/55056de.gif)
思路方法有两个:
1. 将GET请求改成POST请求
![](/icons/55056dou.gif)
然后就可以使用request.
![](/icons/55056set.gif)
CharacterEncoding思路方法设置编码
![](/icons/55056dou.gif)
并使用request.getParameter思路方法直接获得中文请求参数了
![](/icons/55056dou2.gif)
2. 不用改GET请求
![](/icons/55056dou.gif)
在Servlet中使用如下
![](/icons/55056de.gif)
代码来得到中文请求参数
![](/icons/55056dou2.gif)
String name =
![](/icons/55056new.gif)
String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");
综上所述
![](/icons/55056dou.gif)
如果使用了GET请求
![](/icons/55056dou.gif)
则
![](/icons/55056set.gif)
CharacterEncoding思路方法不起作用
![](/icons/55056dou.gif)
只能使用上面
![](/icons/55056de.gif)
代码来解决
![](/icons/55056dou.gif)
而使用POST请求
![](/icons/55056dou.gif)
尽管
![](/icons/55056set.gif)
CharacterEncoding思路方法起作用
![](/icons/55056dou.gif)
但使用上面
![](/icons/55056de.gif)
代码仍然好使(在这时不能使用
![](/icons/55056set.gif)
CharacterEncoding思路方法将编码格式设置成非iso-8859-1格式)
![](/icons/55056dou2.gif)
因此
![](/icons/55056dou.gif)
如果想让Servlet可以同时处理GET和POST请求中
![](/icons/55056de.gif)
中文信息
![](/icons/55056dou.gif)
除了判断这两种思路方法外
![](/icons/55056dou.gif)
还可以使用上面
![](/icons/55056de.gif)
代码来同时处理这两种请求
![](/icons/55056de.gif)
中文信息
![](/icons/55056dou2.gif)
笔者建议使用如下
![](/icons/55056de.gif)
代码来获得中文请求参数:
String name =
![](/icons/55056new.gif)
String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");
![](/icons/55056yinwei.gif)
上面
![](/icons/55056de.gif)
代码是利用了Java
![](/icons/55056de.gif)
编码能力
![](/icons/55056dou.gif)
对于所有
![](/icons/55056de.gif)
Web服务器都会有效
![](/icons/55056dou.gif)
而
![](/icons/55056set.gif)
CharacterEncoding思路方法是通过Web服务器支持
![](/icons/55056de.gif)
![](/icons/55056dou.gif)
并不是所有
![](/icons/55056de.gif)
Web服务器都会对该思路方法有很好
![](/icons/55056de.gif)
支持