问题描述
现有两个web应用,一个encodefilter是utf8的应用a,一个是gbk的应用b。a中设置一个servlet,在里面写httpclient代码,目的是代理访问b应用,访问的结果是页面重写了所有url,这些url都指向a应用下的那个servlet。正常情况下,两者可单独执行。先通过a访问b应用,点击触发一ajaxpost请求,(参数值含有中文),请问,我如何让在此a的那个servlet得到的request。getParamterMap()里面的中文在System.out.print下正常显示(newString的转码试了,貌似不好使)
解决方案
解决方案二:
Filter不能改,在得到参数之前设置gbk也不好使
解决方案三:
response.setCharacterEncoding("UTF-8");
解决方案四:
b应用不可改动
解决方案五:
你想想,你访问A的时候,被过滤器拦了,所有编码是utf-8了.!这个时候你的请求参数拿出来就是utf8编码的.!这个时候把utf-8编码的交给GBK处理,想正确显示的话,除非你在被GBK处理之前把他先转成GBK的.!否则.......
解决方案六:
引用楼主wasaia的回复:
现有两个web应用,一个encodefilter是utf8的应用a,一个是gbk的应用b。a中设置一个servlet,在里面写httpclient代码,目的是代理访问b应用,访问的结果是页面重写了所有url,这些url都指向a应用下的那个servlet。正常情况下,两者可单独执行。先通过a访问b应用,点击触发一ajaxpost请求,(参数值含有中文),请问,我如何让在此a的那个servlet得到的request。getParamterMap()里面的中文在System.out.print下正常显示(newString的转码试了,貌似不好使)
a:UTF8b:GBKa---req--->b:ajaxurl,encoding(utf8)a发给b前编码utf8(1)b---handle:req.setRequestEncoding(utf8),b处理按utf8解码(2)b---res--->a:encoding(gbk)b处理的结果按gbk编码(3)a---getres:req.setRequestEncoding(gbk)a得到结果按gbk解码(4)你这里b不能改,应该是上面(3)的地方是按utf8编码的。所以你的(4),先按utf8解码,再按gbk编码试试。newString(resStr.getBytes("UTF8"),"GBK");
解决方案七:
引用4楼izard999的回复:
你想想,你访问A的时候,被过滤器拦了,所有编码是utf-8了.!这个时候你的请求参数拿出来就是utf8编码的.!这个时候把utf-8编码的交给GBK处理,想正确显示的话,除非你在被GBK处理之前把他先转成GBK的.!否则.......
有没有补救的方法,只改servlet?
解决方案八:
引用5楼crazylaa的回复:
引用楼主wasaia的回复:现有两个web应用,一个encodefilter是utf8的应用a,一个是gbk的应用b。a中设置一个servlet,在里面写httpclient代码,目的是代理访问b应用,访问的结果是页面重写了所有url,这些url都指向a应用下的那个servlet。正常情况下,两者可单独执行。先通过a访问b应用,点击触发一ajaxpost请求,(参数值含有中文),请问,……
(锟杰诧拷OCS锟斤拷锟接︼拷眉锟斤拷锟斤拷锟斤拷锟斤拷?)这是结果。。还有其他方法不?
解决方案九:
顶上去。。。