URL编码原理及Java实现

10 篇文章 0 订阅

原理

URL编码使用 %xx 来表示一个字节。而xx 就是这个字节的十六进制表示。因此编码时,可以将字符串转成UTF-8编码。将每一个字节转成’%xx’形式就是URL编码了。
例如:字符串 “123” 转成utf-8编码就是 0x31 0x32 0x33 共三个字节,然后转成url编码就是 %31%32%33

代码

编码

public static String encode(String text) throws UnsupportedEncodingException {
		byte[] data = text.getBytes("utf-8");
		char[] hex = {'0', '1',  '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
		StringBuffer sb = new StringBuffer();
		for(byte b : data) {
			sb.append("%");
			sb.append(hex[(b & 0xF0) >> 4]);
			sb.append(hex[(b & 0x0F) >> 0]);
		}
		return sb.toString();
	}

解码

public static String decode(String code) throws UnsupportedEncodingException {
		String map = "0123456789ABCDEF";
		if(code.length() % 3 != 0) {
			return null;
		}else {
			byte[] data = new byte[code.length() / 3];
			for(int i = 0; i < code.length(); i += 3) {
				byte b = (byte) (
							map.indexOf(code.charAt(i + 1)) << 4 |
							map.indexOf(code.charAt(i + 2)) << 0 );
				data[i / 3] = b;
			}
			return new String(data, "utf-8");
		}
	}

测试

public static void main(String[] args) throws Exception {
		String code = encode("代码大法好");
		System.out.println("编码:" + code);
		String text = decode(code);
		System.out.println("解码:" + text);
	}

测试结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值