URLEncoder、URLDecoder编码解码

URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之间的相互转换。
在本文中,我们以使用URLDecoder解决GET请求中文乱码问题为场景说明 URLDecoder/URLEncoder 的用法,并给出了 application/x-www-form-urlencoded MIME 字符串的编码规则。

URLDecoder类包含一个decode(String s,String
enc)静态方法,它可以将application/x-www-form-urlencoded MIME字符串转成普通字符串;

URLEncoder类包含一个encode(String s,String
enc)静态方法,它可以将普通字符串转换成application/x-www-form-urlencoded MIME字符串。

public static void main(String[] args) {
    String a = "欢迎你";
    try {
        //编码(后端传给前端数据之前要先 URLEncoder)
        String b = URLEncoder.encode(a, "UTF-8");
        System.out.println(b);
        //解码(前端传给后端数据,后端接收后要先 URLDecoder)
        String c= URLDecoder.decode(b, "UTF-8");
        System.out.println(c);
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

自己在代码中远程调用应用实例:

远程调用的是这个add接口已经编码
  //新增商品维修记录
    @PostMapping(value = "/add")
    public U_result create(@RequestParam(value = "data", defaultValue = "") String data) {
        U_result ret = new U_result();
        data = URLDecoder.decode(data);
        DeviceAlarmData _info = JSON.parseObject(data, DeviceAlarmData.class);

        _info = dataService.addData(_info);
        if (null != _info) {
            ret.suc(_info);
        } else {
            ret.err("系统错误!");
        }
        return ret;
    }

所以此处调用要进行解码

  DeviceAlarmData deviceAlarmData = new DeviceAlarmData();
                  deviceAlarmData.setDeviceId(item.getId());
                  deviceAlarmData.setName(names);
                  deviceAlarmData.setAlarmDateTime(times);
                  deviceAlarmData.setAlarmLvId(alarmLvId);
                 deviceAlarmData.setAlarmContent(alarms);
          Map<String, Object> map = new HashMap<>();
          map.put("data", URLEncoder.encode(JSON.toJSONString(deviceAlarmData)));
          HttpRequest.post(URL_PATH_3).form(map).send().charset("utf-8").bodyText();

测试类展示

public class URLDecoderTest {
    public static void main(String[] args) throws Exception {

        // 将application/x-www-form-urlencoded字符串转换成普通字符串
        // 其中的字符串直接从上图所示窗口复制过来,chrome 默认用 UTF-8 字符集进行编码,所以也应该用对应的字符集解码
        System.out.println("采用UTF-8字符集进行解码:");
        String keyWord = URLDecoder.decode("%E5%A4%A9%E6%B4%A5%E5%A4%A7%E5%AD%A6+Rico", "UTF-8");
        System.out.println(keyWord);
        System.out.println("\n 采用GBK字符集进行解码:");
        System.out.println(URLDecoder.decode("%E5%A4%A9%E6%B4%A5%E5%A4%A7%E5%AD%A6+Rico", "GBK"));

        // 将普通字符串转换成application/x-www-form-urlencoded字符串
        System.out.println("\n 采用utf-8字符集:");
        String urlStr = URLEncoder.encode("天津大学", "utf-8");
        System.out.println(urlStr);
        System.out.println("\n 采用GBK字符集:");
        String urlStr2 = URLEncoder.encode("天津大学", "GBK");
        System.out.println(urlStr2);
    }
}/* Output: 
        采用UTF-8字符集进行解码:
        天津大学 Rico

        采用GBK字符集进行解码:
        澶╂触澶у Rico

        采用utf-8字符集:
        %E5%A4%A9%E6%B4%A5%E5%A4%A7%E5%AD%A6

        采用GBK字符集:
        %CC%EC%BD%F2%B4%F3%D1%A7
 *///:~
Logo

科技之力与好奇之心,共建有温度的智能世界

更多推荐