请先看下列代码:
                  String s="中国";
try {
String s_gbk=URLEncoder.encode(s,"gbk");
String s_3= URLDecoder.decode(s_gbk, "ISO-8859-1");


System.out.println(s_3);

System.out.println(new String (s_3.getBytes("ISO-8859-1"),"gbk"));

String s_4= URLDecoder.decode(s_gbk, "utf-8");



System.out.println(new String (s_4.getBytes("utf-8"),"gbk"));

} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}ISO-8859-1 是可以进行还原的,但是utf-8不行,其中道理看了很多文档,但是现在时间的问题,没办法深究了,请教下牛人,我如何还原!产生的原因:因为我的web是一个支持多种编码格式的,包括了utf-8和gbk,
但是我的web的过滤器是utf-8的,但是客户端用的是gbk的编码,所以post提交服务器后 所有的中文字段是 利用了gbk进行了编码:
如:String s_gbk=URLEncoder.encode(s,"gbk");但是在客户端的过滤器中
request.setCharacterEncoding(encoding);(encoding=utf-8)
response.setCharacterEncoding(encoding);所以服务器对 提交的中文进行了 utf-8的解码,就产生了String s_4= URLDecoder.decode(s_gbk, "utf-8");
(1)问:如何可以对utf-8解码过的数据进行还原!
new String (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方式呢,还在研究中,希望大家能给点帮忙,小弟在线等。。