岁月如灬风 2019-09-17 09:48 采纳率: 0%
浏览 234
已采纳

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

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条回答 默认 最新

  • dabocaiqq 2019-09-17 09:49
    关注
    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 获取的数据的字节数组发出来,我可以帮你分析分析。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?