中文乱码问题,麻烦帮忙看下,谢谢!

JSP传值到后台之前,在控制台打印值:
刘西亮。
后台action代码如下:

        String username=req.getParameter("username");
        username=new String(username.getBytes("GBK"), "UTF-8");
                System.out.println(username);

结果为:
刘西??
tomcat 的server.xml设置了URIEncoding="utf-8" useBodyEncodingForURI="true"。
web.xml设置了:

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GBK</param-value>
        </init-param>
    </filter> 

怎么就最后一个字乱码了呢。。

  1. InputStreamReader 对于 connection 的数据流,是采用 UTF-8 把字节转换成字符
  2. lines.getBytes() 是采用系统的默认编码把字符解码成字节数组
  3. new String(lines.getBytes(),"utf-8") 又对解码后的字节数组采用 UTF-8 转换为字符。

下面分析你的问题:
1. 假设 connection 的数据流是 utf8 编码,而你的系统默认编码也是 utf-8, 那么中文字符问题是不肯能存在的,除非是数据问题
2. 假设 connection 的数据流是 utf8 编码,而你的系统默认编码不是 utf-8, 那么中文字符问题是肯定存在的,即使按照你的方法,去掉lines后面的“utf-8”,这个问题还是会存在
3. 假设 connection 的数据流不是 utf8 编码, 那么 InputStreamReader 读取时就会有问题了, 即使按照你的方法,去掉lines后面的“utf-8”,这个问题还是会存在.

针对你的提问,我非常的好奇,不知道你是怎么解决的,呵呵,如果你想了解真相,建议你把 connection 获取的数据的编码以及系统的编码都发出来,如果还是没搞清楚,可以把 connection 获取的数据的字节数组发出来,我可以帮你分析分析。