原本开发环境用的服务器是tomcat6.0.18,其中有一个url中文参数从页面传入action类,然后跳到另一个jsp,结果发现是乱码,于是在action类中加了个强制转型:this.paraName = new String(paraName.getByte("GBK"),"ISO-8859-1"),再测试,OK了.以为大可放心了.
没想到,用户部署环境为weblogic9,这下好了,这个强制转型就挂掉了,页面从action跳出到输出页面还是显示乱码,结果发现是这个强制转型出了问题,为了解决这两种服务器在参数转码正确问题,加入以下代码即可:
public static String getStringGBKEncode(String str) {
try {
byte[] bytes1 = str.getBytes("UTF-8");
byte[] bytes2 = str.getBytes("ISO-8859-1");
byte[] bytes3 = str.getBytes("Unicode");
if (str.equals(new String(bytes1))) {
return new String(str.getBytes("GBK"),"UTF-8");
}
if (str.equals(new String(bytes2))) {
return new String(str.getBytes("GBK"),"ISO-8859-1");
}
if (str.equals(new String(bytes3))) {
return new String(str.getBytes("GBK"),"Unicode");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}
此代码为在进行强制转码前先判断当前String的编码方式,再进行转码,才能保证转码正确!这样,不论在tomcat还是weblogic均可显示正确了.
此方法适合少量的url传中文参数的解决方法,如有多处需要转码,个人觉得还是编写拦截器统一转码或编写转码标签较好!