问题描述
请先看下列代码:Strings="中国";try{Strings_gbk=URLEncoder.encode(s,"gbk");Strings_3=URLDecoder.decode(s_gbk,"ISO-8859-1");System.out.println(s_3);System.out.println(newString(s_3.getBytes("ISO-8859-1"),"gbk"));Strings_4=URLDecoder.decode(s_gbk,"utf-8");System.out.println(newString(s_4.getBytes("utf-8"),"gbk"));}catch(UnsupportedEncodingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}ISO-8859-1是可以进行还原的,但是utf-8不行,其中道理看了很多文档,但是现在时间的问题,没办法深究了,请教下牛人,我如何还原!产生的原因:因为我的web是一个支持多种编码格式的,包括了utf-8和gbk,但是我的web的过滤器是utf-8的,但是客户端用的是gbk的编码,所以post提交服务器后所有的中文字段是利用了gbk进行了编码:如:Strings_gbk=URLEncoder.encode(s,"gbk");但是在客户端的过滤器中request.setCharacterEncoding(encoding);(encoding=utf-8)response.setCharacterEncoding(encoding);所以服务器对提交的中文进行了utf-8的解码,就产生了Strings_4=URLDecoder.decode(s_gbk,"utf-8");(1)问:如何可以对utf-8解码过的数据进行还原!newString(s_4.getBytes("utf-8"),"gbk")证明是不可行的!(2)问:其实对于post提交,在过滤器中request.setCharacterEncoding设置服务端的解码格式,但是request.getCharacterEncoding()返回了是null。这个问题在网上找到了答案是:IE不写编码格式在http头部!大家参考:http://wanghuan8086.javaeye.com/blog/173869其实为了区分各种编码格式,我要求客服端都传递他们的编码格式是什么:如每次请求必须有参数:inputCharset="utf-8".如果我先在过滤器中使用request.getParameter("inputCharset");那request.setCharacterEncoding就不起作用了,tomcat中就使用服务器默认的编码进行解码(ISO-8859-1)。大侠们,我改何去何从呢?如何对各种编码格式的请求进行转换?对于get方式,处理比较的简单!而post方式呢,还在研究中,希望大家能给点帮忙,小弟在线等。。。。。。。。。。。。。。。。。
解决方案
解决方案二:
自己先顶下~~~~~~~期待大侠们来解决!
解决方案三:
哈哈,看来没有人来关注啊!
解决方案四:
哎呀呀呀!只好土点,如果没人看的话,只好不用utf-8的过滤器,中心定义个新的!