param method encoderFilter isFiltered url pageEncoder result 1: 汤勇 post gbk y encoderServlet gbk 汤勇 2: 汤勇 get gbk y encoderServlet gbk ???? 3: 汤勇 post gbk y encoderStreamServlet gbk %CC%C0%D3%C2 4: 汤勇 post gbk y decoderJsp gbk %CC%C0%D3%C2 5: 汤勇 post gbk y encoderAjaxServlet gbk 姹ゅ媷 6: 汤勇 post gbk n encoderServlet gbk ???? 7: 汤勇 get gbk n encoderServlet gbk ???? 8: 汤勇 post gbk n encoerStreamServlet gbk %CC%C0%D3%C2 9: 汤勇 post gbk n decoderJsp gbk %CC%C0%D3%C2 10: 汤勇 post gbk n encoderAjaxServlet gbk ?±¤??? 11: 汤勇 post utf-8 y encoderServlet utf-8 汤勇 12: 汤勇 get utf-8 y encoderServlet utf-8 汤勇 13: 汤勇 post utf-8 y encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87 14: 汤勇 post utf-8 y decoderJsp utf-8 %E6%B1%A4%E5%8B%87 15: 汤勇 post utf-8 y encoderAjaxServlet utf-8 汤勇 16: 汤勇 post utf-8 y encoderServlet gbk ???? 17: 汤勇 get utf-8 y encoderServlet gbk ???? 18: 汤勇 post utf-8 y encoderStreamServlet gbk %CC%C0%D3%C2 19: 汤勇 post utf-8 y decoderJsp gbk %CC%C0%D3%C2 20: 汤勇 post utf-8 y encoderAjaxServlet gbk 汤勇 16: 汤勇 post utf-8 n encoderServlet gbk ???? 17: 汤勇 get utf-8 n encoderServlet gbk ???? 18: 汤勇 post utf-8 n encoderStreamServlet gbk %CC%C0%D3%C2 19: 汤勇 post utf-8 n decoderJsp gbk %CC%C0%D3%C2 20: 汤勇 post utf-8 n encoderAjaxServlet gbk ?±¤??? 21: 汤勇 post utf-8 n encoderServlet utf-8 ?±¤??? 22: 汤勇 get utf-8 n encoderServlet utf-8 汤勇 23: 汤勇 post utf-8 n encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87 24: 汤勇 post utf-8 n decoderJsp utf-8 %E6%B1%A4%E5%8B%87 25: 汤勇 post utf-8 n encoderAjaxServlet utf-8 ?±¤??? 结论: 以上测试均在tomcate server.xml里面设制了 urlEncoding = "utf-8" 是否用了过滤器 过滤器编码 页面编码 第一组测试-条件: 用了 gbk gbk 第二组测试-条件 没有 gbk 第三组测试-条件 用了 utf-8 utf-8 第四组测试-条件 用了 utf-8 gbk 第五组测试-条件 没用 utf-8 第二轮测试 测试均在tomcate server.xml 默认设制下进行的 param method encoderFilter isFiltered url pageEncoder result 1: 汤勇 post gbk y encoderServlet gbk 汤勇 2: 汤勇 get gbk y encoderServlet gbk 汤勇 3: 汤勇 post gbk y encoderStreamServlet gbk %CC%C0%D3%C2 4: 汤勇 post gbk y decoderJsp gbk %CC%C0%D3%C2 5: 汤勇 post gbk y encoderAjaxServlet gbk 姹ゅ媷 6: 汤勇 post gbk n encoderServlet gbk ???? 7: 汤勇 get gbk n encoderServlet gbk ???? 8: 汤勇 post gbk n encoerStreamServlet gbk %CC%C0%D3%C2 9: 汤勇 post gbk n decoderJsp gbk %CC%C0%D3%C2 10: 汤勇 post gbk n encoderAjaxServlet gbk ?±¤??? 11: 汤勇 post utf-8 y encoderServlet utf-8 汤勇 12: 汤勇 get utf-8 y encoderServlet utf-8 ?±¤??? 13: 汤勇 post utf-8 y encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87 14: 汤勇 post utf-8 y decoderJsp utf-8 %E6%B1%A4%E5%8B%87 15: 汤勇 post utf-8 y encoderAjaxServlet utf-8 汤勇 16: 汤勇 post utf-8 n encoderServlet utf-8 ?±¤??? 17: 汤勇 get utf-8 n encoderServlet utf-8 ?±¤??? 18: 汤勇 post utf-8 n encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87 19: 汤勇 post utf-8 n decoderJsp utf-8 %E6%B1%A4%E5%8B%87 20: 汤勇 post utf-8 n encoderAjaxServlet utf-8 ?±¤??? param encoderMethod decoderMethod result 汤勇 gbk iso8859-1 ???? 汤勇 gbk utf-8 ???? 汤勇 utf-8 iso8859-1 ?±¤???汤勇 utf-8 gbk 姹ゅ媷结论 step_1 : pageEncoder : step_2 : serverEncoder: stop_3 : filterEncoder:
step_4: application: 第二轮测试 测试均在tomcate server.xml GBK设制下进行的 param method encoderFilter isFiltered url pageEncoder result 1: 汤勇 post gbk y encoderServlet gbk 汤勇 2: 汤勇 get gbk y encoderServlet gbk 汤勇 3: 汤勇 post gbk y encoderStreamServlet gbk %CC%C0%D3%C2 4: 汤勇 post gbk y decoderJsp gbk %CC%C0%D3%C2 5: 汤勇 post gbk y encoderAjaxServlet gbk 姹ゅ媷 6: 汤勇 post gbk n encoderServlet gbk ???? 7: 汤勇 get gbk n encoderServlet gbk ???? 8: 汤勇 post gbk n encoerStreamServlet gbk %CC%C0%D3%C2 9: 汤勇 post gbk n decoderJsp gbk %CC%C0%D3%C2 10: 汤勇 post gbk n encoderAjaxServlet gbk ???? 11: 汤勇 post utf-8 y encoderServlet utf-8 ???? 12: 汤勇 get utf-8 y encoderServlet utf-8 ???? 13: 汤勇 post utf-8 y encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87 14: 汤勇 post utf-8 y decoderJsp utf-8 %E6%B1%A4%E5%8B%87 15: 汤勇 post utf-8 y encoderAjaxServlet utf-8 ???? 16: 汤勇 post utf-8 n encoderServlet utf-8 ?±¤??? 17: 汤勇 get utf-8 n encoderServlet utf-8 ?±¤??? 18: 汤勇 post utf-8 n encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87 19: 汤勇 post utf-8 n decoderJsp utf-8 %E6%B1%A4%E5%8B%87 20: 汤勇 post utf-8 n encoderAjaxServlet utf-8 ????
问题在这..
URL不能传中文,要转换urlencode
param method encoderFilter isFiltered url pageEncoder result
1: 汤勇 post gbk y encoderServlet gbk 汤勇
2: 汤勇 get gbk y encoderServlet gbk ????
3: 汤勇 post gbk y encoderStreamServlet gbk %CC%C0%D3%C2
4: 汤勇 post gbk y decoderJsp gbk %CC%C0%D3%C2
5: 汤勇 post gbk y encoderAjaxServlet gbk 姹ゅ媷 6: 汤勇 post gbk n encoderServlet gbk ????
7: 汤勇 get gbk n encoderServlet gbk ????
8: 汤勇 post gbk n encoerStreamServlet gbk %CC%C0%D3%C2
9: 汤勇 post gbk n decoderJsp gbk %CC%C0%D3%C2
10: 汤勇 post gbk n encoderAjaxServlet gbk ?±¤??? 11: 汤勇 post utf-8 y encoderServlet utf-8 汤勇
12: 汤勇 get utf-8 y encoderServlet utf-8 汤勇
13: 汤勇 post utf-8 y encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87
14: 汤勇 post utf-8 y decoderJsp utf-8 %E6%B1%A4%E5%8B%87
15: 汤勇 post utf-8 y encoderAjaxServlet utf-8 汤勇
16: 汤勇 post utf-8 y encoderServlet gbk ????
17: 汤勇 get utf-8 y encoderServlet gbk ????
18: 汤勇 post utf-8 y encoderStreamServlet gbk %CC%C0%D3%C2
19: 汤勇 post utf-8 y decoderJsp gbk %CC%C0%D3%C2
20: 汤勇 post utf-8 y encoderAjaxServlet gbk 汤勇 16: 汤勇 post utf-8 n encoderServlet gbk ????
17: 汤勇 get utf-8 n encoderServlet gbk ????
18: 汤勇 post utf-8 n encoderStreamServlet gbk %CC%C0%D3%C2
19: 汤勇 post utf-8 n decoderJsp gbk %CC%C0%D3%C2
20: 汤勇 post utf-8 n encoderAjaxServlet gbk ?±¤??? 21: 汤勇 post utf-8 n encoderServlet utf-8 ?±¤???
22: 汤勇 get utf-8 n encoderServlet utf-8 汤勇
23: 汤勇 post utf-8 n encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87
24: 汤勇 post utf-8 n decoderJsp utf-8 %E6%B1%A4%E5%8B%87
25: 汤勇 post utf-8 n encoderAjaxServlet utf-8 ?±¤???
结论:
以上测试均在tomcate server.xml里面设制了 urlEncoding = "utf-8"
是否用了过滤器 过滤器编码 页面编码
第一组测试-条件: 用了 gbk gbk 第二组测试-条件 没有 gbk 第三组测试-条件 用了 utf-8 utf-8 第四组测试-条件 用了 utf-8 gbk 第五组测试-条件 没用 utf-8
第二轮测试 测试均在tomcate server.xml 默认设制下进行的 param method encoderFilter isFiltered url pageEncoder result
1: 汤勇 post gbk y encoderServlet gbk 汤勇
2: 汤勇 get gbk y encoderServlet gbk 汤勇
3: 汤勇 post gbk y encoderStreamServlet gbk %CC%C0%D3%C2
4: 汤勇 post gbk y decoderJsp gbk %CC%C0%D3%C2
5: 汤勇 post gbk y encoderAjaxServlet gbk 姹ゅ媷 6: 汤勇 post gbk n encoderServlet gbk ????
7: 汤勇 get gbk n encoderServlet gbk ????
8: 汤勇 post gbk n encoerStreamServlet gbk %CC%C0%D3%C2
9: 汤勇 post gbk n decoderJsp gbk %CC%C0%D3%C2
10: 汤勇 post gbk n encoderAjaxServlet gbk ?±¤??? 11: 汤勇 post utf-8 y encoderServlet utf-8 汤勇
12: 汤勇 get utf-8 y encoderServlet utf-8 ?±¤???
13: 汤勇 post utf-8 y encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87
14: 汤勇 post utf-8 y decoderJsp utf-8 %E6%B1%A4%E5%8B%87
15: 汤勇 post utf-8 y encoderAjaxServlet utf-8 汤勇 16: 汤勇 post utf-8 n encoderServlet utf-8 ?±¤???
17: 汤勇 get utf-8 n encoderServlet utf-8 ?±¤???
18: 汤勇 post utf-8 n encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87
19: 汤勇 post utf-8 n decoderJsp utf-8 %E6%B1%A4%E5%8B%87
20: 汤勇 post utf-8 n encoderAjaxServlet utf-8 ?±¤???
param encoderMethod decoderMethod result 汤勇 gbk iso8859-1 ???? 汤勇 gbk utf-8 ???? 汤勇 utf-8 iso8859-1 ?±¤???汤勇 utf-8 gbk 姹ゅ媷结论
step_1 :
pageEncoder :
step_2 :
serverEncoder: stop_3 : filterEncoder:
step_4: application:
第二轮测试 测试均在tomcate server.xml GBK设制下进行的 param method encoderFilter isFiltered url pageEncoder result
1: 汤勇 post gbk y encoderServlet gbk 汤勇
2: 汤勇 get gbk y encoderServlet gbk 汤勇
3: 汤勇 post gbk y encoderStreamServlet gbk %CC%C0%D3%C2
4: 汤勇 post gbk y decoderJsp gbk %CC%C0%D3%C2
5: 汤勇 post gbk y encoderAjaxServlet gbk 姹ゅ媷 6: 汤勇 post gbk n encoderServlet gbk ????
7: 汤勇 get gbk n encoderServlet gbk ????
8: 汤勇 post gbk n encoerStreamServlet gbk %CC%C0%D3%C2
9: 汤勇 post gbk n decoderJsp gbk %CC%C0%D3%C2
10: 汤勇 post gbk n encoderAjaxServlet gbk ???? 11: 汤勇 post utf-8 y encoderServlet utf-8 ????
12: 汤勇 get utf-8 y encoderServlet utf-8 ????
13: 汤勇 post utf-8 y encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87
14: 汤勇 post utf-8 y decoderJsp utf-8 %E6%B1%A4%E5%8B%87
15: 汤勇 post utf-8 y encoderAjaxServlet utf-8 ???? 16: 汤勇 post utf-8 n encoderServlet utf-8 ?±¤???
17: 汤勇 get utf-8 n encoderServlet utf-8 ?±¤???
18: 汤勇 post utf-8 n encoderStreamServlet utf-8 %E6%B1%A4%E5%8B%87
19: 汤勇 post utf-8 n decoderJsp utf-8 %E6%B1%A4%E5%8B%87
20: 汤勇 post utf-8 n encoderAjaxServlet utf-8 ????
编码的顺序是这样的!1: 页面编码 也就是你的
2: 服务器编码如果你 tomcate 设置的 urlEncoding = "" [这种情况只 对 get 提交有用]
3: 过滤器编码
4: 到你的后台程序里面!不过奇怪的是 如果我把这段代码直接写在jsp页面中可以正常显示
jsp页面的编码为gb2312 request.setCharacterEncoding("gbk"); 后可以正常获取参数
很简单 jsp 执行顺序是先 转译 --》 再编译! 所以很好解释!要解决你的问题! 首先要知道发过来的url[也就是说第三方提供给你的url编码方式]如果你用的 ssh 那么 在struts.xml文件里面应该有设计编码方式![他比你加载过滤器先执行而且在action里面得到参数时真是用这种解码方式得到的所以你加过滤器也没用]
反正记住一点!编码过程就这么几个地方
1:jsp页面
2:tomcate 如果你设置了
3: 过滤器
4: 到了后台了! 编码,解码一样就不会出现乱码!
我重写了过滤器的方法 在过滤器中取一次我要的参数 不需要任何转码 只要
request.getParameter("参数名"); 执行这句话然后在程序中调用
new String(request.getParameter("参数名").getBytes("iso-8859-1"), "GBK");
中文正常
但是如果不取一下值就算我在过滤器中设置request.setCharacterEncoding("GBK"); 或者request.setCharacterEncoding("ISO-8859-1");都没法正确解码这时我打印出request的编码显示utf-8不知道怎么转的
我的项目是用springside3搭建的 struts2.1.8+spring2.5.6+hibernate3
我去掉了struts2中的编码配置 开始怀疑过编码问题 去掉了试也还是不可以实在不知道怎么办 虽然可以通过上面很无奈的方法暂时解决这个问题
但这不是最优的解决方案 所以想寻找正解