当前位置: 首页 > news >正文

JAVA 解决URLEncoder加密后,%后的字母变成小写

前言

当你搜到这篇文章,我感觉多半是因为对接了.NET的相关接口。

在C#里面,使用HttpUtility.UrlEncode(xxx); 出来的值,% 后面的字母是小写的;

而在java里面,URLEncoder.encode(xxx, "utf-8"); 出来的值, % 后面的字母是大写的;

 

正文

加密

将url编码函数加密后的值,% 后面的字母转为小写, 使其与C# 使用HttpUtility.UrlEncode(xxx)的值一样:

    public static String getEncode(String needEncodeStr) throws UnsupportedEncodingException {

        String encodeStr = URLEncoder.encode(needEncodeStr, "utf-8");
        String[] uppercase = new String[0XFF + 1];
        String[] lowercase = new String[0XFF + 1];
        for (int i = 0; i <= 0XFF; i++) {
            uppercase[i] = "%" + String.format("%02x", i);
            lowercase[i] = uppercase[i];
            uppercase[i] = uppercase[i].toUpperCase();
        }
      return   StringUtils.replaceEach(encodeStr, uppercase, lowercase);
// StringUtils.replaceEac :org.apache.commons.lang3.StringUtils;
    }

测试,可以看到如愿,%后的大写字母已经变成小写,而且是针对特殊的符合转换的那一部分:

    public static void main(String[] args) throws UnsupportedEncodingException {

        String needEncodeStr="https://jcTest.com";
        String encodeStr = URLEncoder.encode(needEncodeStr, "utf-8");
        System.out.println("正常java的url编码函数加密后:"+encodeStr);
        String encodeStrNew = getEncode(needEncodeStr);
        System.out.println("大写字母变小写的处理后:"+encodeStrNew);

    }

 

 解密

那么如果涉及到url编码函数解密,上面得到的小写字母值,
用java的URLDecoder.decode(xxx,"UTF-8");
 

        String encodeStr="https%3a%2f%2fjcTest.com";
        String decode = URLDecoder.decode(encodeStr, "UTF-8");
        System.out.println(decode);

测试结果:

可以看到解密的时候,%后面的小写大写并没有什么影响,还是能正常解密。

 

但是如果你不放心,那么可以先将%后面的小写字母重新转换回大写,再进行解密,也是可以的。

        String encodeStr="https%3a%2f%2fjcTest.com";
        String decode1 = getDecode(encodeStr);
        System.out.println(decode1);
    public static String getDecode(String encodeStr) throws UnsupportedEncodingException {
        String[] uppercase = new String[0XFF + 1];
        String[] lowercase = new String[0XFF + 1];
        for (int i = 0; i <= 0XFF; i++) {
            uppercase[i] = "%" + String.format("%02x", i);
            lowercase[i] = uppercase[i];
            uppercase[i] = uppercase[i].toUpperCase();
        }
        String s = StringUtils.replaceEach(encodeStr, lowercase, uppercase);
        return   URLDecoder.decode(s,"UTF-8");
    }

测试结果:

 

相关文章:

  • Java 将带有 ‘T’的时间字符串转换成yyyy-MM-dd HH:mm:ss 格式
  • 【硬着头皮】 你在玩的什么Map啊
  • 【硬着头皮】 你别查询了,不就id么?
  • 【硬着头皮】 去重确实可以这么去,但是
  • 【硬着头皮】 你在筛选List里面的数据么?
  • 【硬着头皮】 停手,时间格式转换不一定要在外面转换
  • 【硬着头皮】 喂,你不就想想看数组里的值么
  • 【硬着头皮】 比较两个数大小,麻烦写得整洁点
  • 【硬着头皮】 比较多个数的大小,麻烦也写得整洁点
  • Springboot 使用设计模式- 策略模式
  • Springboot 整合ElasticSearch 常用的插入查询,模糊查询,范围查询
  • JAVA 关键字、敏感字 屏蔽过滤功能实现
  • 【硬着头皮】switch很少看到,还是写 if 吧?
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • Springboot设置接口允许跨域
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • CSS魔法堂:Absolute Positioning就这个样
  • Django 博客开发教程 8 - 博客文章详情页
  • Docker容器管理
  • javascript 总结(常用工具类的封装)
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java-详解HashMap
  • Laravel 中的一个后期静态绑定
  • Linux后台研发超实用命令总结
  • Making An Indicator With Pure CSS
  • React 快速上手 - 07 前端路由 react-router
  • SQLServer之创建显式事务
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue.js框架原理浅析
  • vue-loader 源码解析系列之 selector
  • 安装python包到指定虚拟环境
  • 百度地图API标注+时间轴组件
  • 官方解决所有 npm 全局安装权限问题
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 计算机在识别图像时“看到”了什么?
  • 每天10道Java面试题,跟我走,offer有!
  • 如何胜任知名企业的商业数据分析师?
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 推荐一个React的管理后台框架
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用