日期:2014-05-19  浏览次数:20787 次

又是恶心的乱码问题 jsp页面中文提交后后台变成了 长期负债合计 求指导呀
在jsp页面使用了strut2 的s:optiontransferselect标签 提交两个list类型的数据,里面都是中文的,后台获取的数据却变成了这样的形式&#38271;&#26399;&#36127;&#20538,不知道到底是哪里的问题 jsp页面的编码方式是gbk,strut2.xml也配置了编码方式为gbk。数据提交的方式是<ss:submit value="筛选" formId="selectCom" href="%{divSelectCom}" targets="result" onclick="selectCompany()"></ss:submit> 采用了异步提交 。 求各位大侠知道下 到底哪里出错了 ,找了一下午额 还没有找到 纠结死了。。。

------解决方案--------------------
Java code



/**
 * 将页面传递的Unicode字符编码转换成相应的汉字
 * */
public class GetStringByString  {

    private String string;
    public GetStringByString(String string){
        this.string=string;
    }
    public String getUnicodeString(){
        
        if(!isIllegal(this.string)){
            return this.string;
        }
        
        
        String[] s=this.string.split(";");
        
        StringBuffer sb=new StringBuffer();
        
        
        for(int i=0;i<s.length;i++){
            if(isHave(s[i])){
                String s1=s[i].substring(0, s[i].indexOf("&"));
                sb.append(s1);
                String s2=s[i].substring(s[i].indexOf("#")+1);
                sb.append((char)Integer.parseInt(s2));
            }
            else{
                sb.append(s[i]);
            }
        }
        return sb.toString();
    }
    //判断是否存在&#
    private boolean isHave(String s){
        
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)=='&'&&s.charAt(i+1)=='#'){
                return true;
            }
        }
        return false;
    }
    //判断是否存在;
    private boolean isIllegal(String s){

        for(int i=0;i<s.length();i++){
            if(s.charAt(i)==';'&&s.charAt(i-6)=='#'&&s.charAt(i-7)=='&'){
                return true;
            }
        }
        return false;
    }
    
}