zoukankan      html  css  js  c++  java
  • 【转】JavaWeb编码之get方式中文乱码问题

    一、现象描述

    以get方式提交含中文表单,后台接收为乱码:

    <form action="admin/User/searchUser.do" method="get">
        <div class="input-group">
           <input type="text" class="form-control" name="content" value="${content}" placeholder="Search for..." required>
           <span class="input-group-btn">
               <button class="btn btn-default" type="submit">搜索</button>
           </span>
       </div>
    </form>

    访问地址为: 
    地址 
    后台输出为: 
    输出

    二、现象分析

    URL 的组成部分如下: 
    URL组成

    请求的地址为: 
    请求地址

    从Request URL 可以看出 QueryString 编码是GBK。

    以 GET 方式 HTTP 请求的 QueryString 和以 POST 方式 HTTP 请求的表单参数都是作为 Parameters 保存的,都通过 request.getParameter 获取参数值。

    对它们的解码是在 request.getParameter 第一次被调用时进行的。 
    request.getParameter 方法被调用时将会调用 org.apache.catalina.connector.Request 的 parseParameters 方法。这个方法会对 GET 和 POST 方式传递的参数进行解码,但是他们解码的字符集可能不一样。

    而QueryString编码采取的字符集要么是 Header 中 ContentType 定义的Charset,要么是默认的 ISO-8859-1 编码。

    而此处 html 页面未设置 Content-Type,由此得出结论:中文经过GBK编码后,在服务端经过 ISO-8859-1解码,导致乱码。

    三、解决方式

    1. 配置Tomcat的 server.xml 文件中的 connector 的 URIEncoding 和 useBodyEncodingForURI 属性(useBodyEncodingForURI = “true” 表示使用 ContentType 定义的编码,而且此处的 URI 仅仅是对 QueryString 使用 BodyEncoding 解码);
    2. 使用 new String(str.getBytes(“ISO-8859-1”), “UTF-8”) 解码;

    验证如下: 
    方式1: 
    配置

    结果为: 
    结果

    使用 UTF-8 解码则中文正确传递。

    方式2:

    @RequestMapping(value = "/searchUser")
    public String searchUser(String content) {
        System.out.println("content: " + content);
        try {
            content = new String(content.getBytes("ISO-8859-1"), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        System.out.println("content after decode: " + content);
    }

    结果为: 
    结果

  • 相关阅读:
    第二阶段冲刺—第三天
    团队测试计划
    第二阶段冲刺—第二天
    第二阶段冲刺—第一天
    评分表
    针对每个组建议的改进
    第二阶段团队绩效评分
    项目总结
    会议2.10
    会议2.9
  • 原文地址:https://www.cnblogs.com/julinhuitianxia/p/7679956.html
Copyright © 2011-2022 走看看