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

strut2中文乱码
页面设置编码:gb2312
其余所有设置均为:utf-8
tomcat同样设URIEcoding:utf-8
现在要早Action中接受页面传过来的值
无论怎么转都是乱码:我试过的方法有
Java code

HttpServletRequest request = ServletActionContext.getRequest();

        request.setCharacterEncoding("gb2312");
        String str = request.getParameter("msgContent");
        System.out.println(str);
        System.out
                .println(new String(this.getMsgContent().getBytes(), "utf-8"));
        System.out
                .println(new String(this.getMsgContent().getBytes(), "gb2312"));
        System.out.println(new String(this.getMsgContent().getBytes(), "gbk"));
        System.out.println("可以正常么1:" + this.getMsgContent());// 1
        System.out.println("可以正常么2:" + this.getMsgContent().getBytes());// 2
        System.out.println("可以正常么3:" + this.getMsgContent().getBytes("GB2312"));// 3
        System.out.println("可以正常么4:"
                + this.getMsgContent().getBytes("ISO-8859-1"));// 4
        System.out.println("可以正常么5:"
                + new String(this.getMsgContent().getBytes()));// 5
        System.out.println("可以正常么6:"
                + new String(this.getMsgContent().getBytes(), "GB2312"));// 6
        System.out.println("可以正常么7:"
                + new String(this.getMsgContent().getBytes(), "ISO-8859-1"));// 7
        System.out.println("可以正常么8:"
                + new String(this.getMsgContent().getBytes("GB2312")));// 8
        System.out
                .println("可以正常么9:"
                        + new String(this.getMsgContent().getBytes("GB2312"),
                                "GB2312"));// 9
        System.out.println("可以正常么10:"
                + new String(this.getMsgContent().getBytes("GB2312"),
                        "ISO-8859-1"));// 10
        System.out.println("可以正常么11:"
                + new String(this.getMsgContent().getBytes("ISO-8859-1")));// 11
        System.out
                .println("====================================12=====================");
        System.out.println("可以正常么12:"
                + new String(this.getMsgContent().getBytes("ISO-8859-1"),
                        "GB2312"));// 12
        System.out
                .println("====================================13=====================");
        System.out.println("可以正常么1:"
                + new String(this.getMsgContent().getBytes("ISO-8859-1"),
                        "ISO-8859-1"));// 13
        String stra = URLDecoder.decode(this.getMsgContent(), "utf-8");//
        String stra1 = URLDecoder.decode(this.getMsgContent(), "gbk");//
        String stra2 = URLDecoder.decode(this.getMsgContent(), "gb2312");//
        System.out.println(stra);
        System.out.println(stra1);
        System.out.println(stra2);


//运行结果如下:
?????????????
?????????????
?????????????
?????????????
可以正常么1:?????????????
可以正常么2:[B@1cf806b
可以正常么3:[B@11272ec
可以正常么4:[B@36fc18
可以正常么5:?????????????
可以正常么6:?????????????
可以正常么7:?????????????
可以正常么8:?????????????
可以正常么9:?????????????
可以正常么10:?????????????
可以正常么11:?????????????
====================================12=====================
可以正常么12:?????????????
====================================13=====================
可以正常么1:?????????????
?????????????
?????????????
?????????????



------解决方案--------------------
因为你页面设置了编码为gb2312, 所以你传递到后台的数据相当于用UTF-8 解析gb2312编码的数据,当然就会出现乱码,建议你在页面设置为UTF-8,这样对以后有好处,不会出现乱码。或者你把Action中的编码格式改为gb2312也可以。
------解决方案--------------------
试试这个