岁月如灬风 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 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站