岁月如灬风 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 vue3页面el-table页面数据过多
  • ¥100 vue3中融入gRPC-web
  • ¥15 kali环境运行volatility分析android内存文件,缺profile
  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码