URL 编解码原理分析

编程入门 行业动态 更新时间:2024-10-27 18:20:09

URL 编解码<a href=https://www.elefans.com/category/jswz/34/1770123.html style=原理分析"/>

URL 编解码原理分析

为什么要URLEncode

URL在定义时,定义为只支持ASCII字符,所以URL的发送方与接收方都只能处理ASCII字符。所以当你的URL中有非ASCII字符时就需要编码转换。

在Web程序中进行URL请求时,常会遇到URL中含有特殊字符的问题,常见的特殊字符有 ?$&*@等字符,或者是中文。

遇到这种情况时,就要对URL进行编码,用一种规则替换掉这些特殊字符,这就是URLEncode

URLEncode 规则

1.将空格转换为加号(+)

2.对0-9、a-z、A-Z之间的字符保持不变

3.对于所有其他的字符,用这个字符的当前字符集编码在内存中的十六进制格式表示,并在每一个字节前加上一个百分号(%),如字符“+”是用%2B表示,字符“=”用%3D表示,字符“&”用%26表示,每个中文字符在内存中占两个字节,字符“中”用%D6%D0表示,字符“国”用%B9%FA表示。

4.空格也可以直接用其十六进制编码方式,即用%20表示,而不是将它转换为加号(+)。

下表为UTF-8的码表:


可以看到‘+’ 在UTF-8里是002B 所以URL encode之后就是%2B

/

一段示例代码:

    //直接解码println(URLDecoder.decode("7BVz75MBX8HSm+PNo6yNlVyu1titpIrAMkYZ4A0mwzY=","UTF-8"))//解码println(URLDecoder.decode("7BVz75MBX8HSm%20PNo6yNlVyu1titpIrAMkYZ4A0mwzY%3D","UTF-8"))//先编码println(URLEncoder.encode("7BVz75MBX8HSm+PNo6yNlVyu1titpIrAMkYZ4A0mwzY=","UTF-8"))//后解码println(URLDecoder.decode("7BVz75MBX8HSm%2BPNo6yNlVyu1titpIrAMkYZ4A0mwzY%3D","UTF-8"))输出:7BVz75MBX8HSm PNo6yNlVyu1titpIrAMkYZ4A0mwzY=
7BVz75MBX8HSm PNo6yNlVyu1titpIrAMkYZ4A0mwzY=
7BVz75MBX8HSm%2BPNo6yNlVyu1titpIrAMkYZ4A0mwzY%3D
7BVz75MBX8HSm+PNo6yNlVyu1titpIrAMkYZ4A0mwzY=

我们看到对于“7BVz75MBX8HSm+PNo6yNlVyu1titpIrAMkYZ4A0mwzY=” 这个字符串
如果直接进行decode,里面的‘+’会被decode成空格,因为源码里是直接这么写的:
.base/share/classes/java/net/URLDecoder.java

public static String decode(String s, Charset charset) {Objects.requireNonNull(charset, "Charset");boolean needToChange = false;int numChars = s.length();StringBuilder sb = new StringBuilder(numChars > 500 ? numChars / 2 : numChars);int i = 0;char c;byte[] bytes = null;while (i < numChars) {c = s.charAt(i);switch (c) {case '+':sb.append(' ');i++;needToChange = true;break;case '%':......

我们可以看到,‘+’ 和 %20 都被转成了空格,他们在进行解码的时候,是等值的。

疑问:

很多平台都是有问题的,比如/url.html

m+P 字符串decode 还是源字符串
不会变成m P
不确定是不是没有适配JAVA?

更多推荐

URL 编解码原理分析

本文发布于:2023-11-16 07:35:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1614580.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:原理   编解码   URL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!