URL encode和decode的原理解析

URL encode和decode的原理解析

1. URLEncoder.encode()

surrogate pair: UTF-16中用于扩展字符而使用的编码方式,是一种采用四个字节(两个UTF-16编码)来表示一个字符。

encode的原理:

首先建立一个dontNeedEncoding集合来保存不需要进行编码的字符,包括a-z, A-Z, 0-9等。

对待编码字符串进行循环遍历,对每一位字符c进行验证:

1)如果c在dontNeedEncoding中,即c不需要编码,则直接将其append到结果字符串;

2)如果c不在dontNeedEncoding中,证明c需要被编码,校验当前位与下一位符合hex编码的高低代理位规则,并将他们写入待处理CharArrayWriter中。

接下来对charArrayWriter中的特殊字符进行处理:

根据编码方式将其转为byte数组,并进行遍历:对待每一位特殊字符,在其前面加上%,并将其转为16进制字符串,并将转义后的结果append到结果字符串。

2. decode

decode的原理:

对待解码字符串进行遍历,对待每一个字符c进行验证:

1)如果为‘+’, 则直接在结果append空格字符' '

2) 如果为'%',则代表其应该是经过编码的特殊字符,则当前位i-->i+2位应该是一个特殊字符的编码结果,将其转回为byte字符;如果遇到i到i+2位之间不符合hex字符规则的情况,则抛出异常;如果再处理后发现字符串仍包含未处理%,则证明该字符串不符合编码规则,抛出异常。

🎀 相关推荐

MED药学研究 | 多肽合成中二硫键的构建及鉴定技术
🎯 365bet线上平台

MED药学研究 | 多肽合成中二硫键的构建及鉴定技术

📅 08-04 👀 6938
PS教程:快速解锁图层
🎯 365bet线上平台

PS教程:快速解锁图层

📅 09-19 👀 1452
亲亲小贷是正规贷款公司吗?
🎯 365邮箱验证

亲亲小贷是正规贷款公司吗?

📅 07-15 👀 7402