首页 > 其他分享 >URL编码

URL编码

时间:2024-06-21 10:56:48浏览次数:13  
标签:编码 URLEncoder String URL E4% B8%

URL 编码是浏览器发送数据给服务器时使用的编码,它通常附加在 URL 的参数部分。

为什么需要 URL 编码

举个例子,我们在百度里搜索“中文”这两个字,其发送给后台服务器的网址类似这样的:https://www.baidu.com/s?wd=%E4%B8%AD%E6%96%87

我们可以打开浏览器控制台查看:

这些字符串是怎么来的呢?是通过 URL 编码的方式得出的。以前很多服务器只识别 ASCII 字符。但如果 URL 中包含中文、日文这些非 ASCII 字符怎么办?就得 URL 编码规则来转换了:

  • 如果字符是 A ~ Z​,a ~z​,0 ~ 9​ 以及 -​、_​、.​、*​,则保持不变
  • 如果是其他字符,先转换为 UTF-8 编码,然后对每个字节以 %XX​表示
  • URL 编码总是大写

例如:字符 ​​的 UTF-8 编码是 0xe4b8ad​​,因此,它的 URL 编码是 %E4%B8%AD​​。

URLEncoder

很多语言都提供了对 URL 进行编码的工具类。例如在 Java 中,提供了 URLEncoder 来对字符进行编码,我们来试试对“中文!” 这个词进行编码:

import java.net.URLEncoder;

public class TestURL{
    public static void main(String[] args) throws Exception{
        String encoded = URLEncoder.encode("中文!", "UTF-8");
        System.out.println(encoded);
    }
}

上述代码的运行结果是 %E4%B8%AD%E6%96%87%21​, ​的 URL 编码是 %E4%B8%AD​, ​的 URL 编码是 %E6%96%87​,! ​虽然是 ASCII 字符(这里用更多是半角符号),也要对其编码为 %21​。

和标准的 URL 编码稍有不同,URLEncoder 把空格字符编码成 +​,而现在的 URL 编码标准要求空格被编码为 %20​,不过,服务器都可以处理这两种情况。

URLDecoder

如果服务器收到 URL 编码的字符串,就可以对其进行解码,还原成原始字符串。Java 标准库的 URLDecoder ​就可以解码:

import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
public class TestURL {
    public static void main(String[] args) {
        String decoded = URLDecoder.decode("%E4%B8%AD%E6%96%87%21", StandardCharsets.UTF_8);
        System.out.println(decoded);
    }
}

完整代码

import java.net.URLDecoder;
import java.net.URLEncoder;

public class TestURL {
  public static void main(String[] args) throws Exception{
    String encoded = URLEncoder.encode("中文!", "UTF-8");
    System.out.println(encoded);  //%E4%B8%AD%E6%96%87%21


    String decoString = URLDecoder.decode("%E4%B8%AD%E6%96%87%21", "UTF-8");
    System.out.println(decoString);    //中文
  }
}

小结

URL 编码的目的是把任意文本数据编码为 %​ 前缀表示的文本,编码后的文本仅包含 A ~ Z​,a ~ z​,0 ~ 9​,-​,_​,.​,*​ 和 %​,便于浏览器和服务器处理。

标签:编码,URLEncoder,String,URL,E4%,B8%
From: https://www.cnblogs.com/PeterJXL/p/18260110

相关文章

  • 常见数据库url 和driver
    转自:http://blog.csdn.net/kimsoft/article/details/3305675PropertiesfilewithJDBC-relatedsettings.##########HSQLDB##########jdbc.driverClassName=org.hsqldb.jdbcDriverjdbc.url=jdbc:hsqldb:hsql://localhost:9001/bookstorejdbc.username=sajdbc.password......
  • m2_day12 [URL + Socket]
    课程内容:URL和SocketServer端Client端URL和SocketURL=>统一资源定位符:网址URLurl=newURL("网址");URLConnectionuc=url.openConnection();InputStreamis=uc.getInputStream();....​uc.getContentLength();得到目标内容长......
  • 基于哔哩哔哩视频库的音频提取播放器,实现下载B站音频到本地,方便把鬼畜下载到手机上,项
    importreimportjsonimportthreadingimporttimeimportosimportshutilimportsubprocessimportrequestsimportPySimpleGUIassgos.environ['PYGAME_HIDE_SUPPORT_PROMPT']="hide"frompygameimportmixersg.theme('SystemDef......
  • curl命令 – 文件传输工具
    curl命令来自英文词组CommandLineURL的缩写,其功能是在Shell终端界面中基于URL规则进行文件传输工作。curl是一款综合性的传输工具,可以上传也可以下载,支持HTTP、HTTPS、FTP等30余种常见协‍议。语法格式:curl参数网址URL文件名参考示例获取指定网站的网页源码:[root@linuxcoo......
  • 理解视频编码中的 I 帧和 IDR 帧
    视频编码是将视频数据进行压缩和解压缩的过程,以减少存储和传输带宽需求。在这个过程中,不同类型的帧(帧是视频的基本组成单元)扮演着不同的角色。I帧(Intra-codedFrame)I帧是视频编码中的一种关键帧,它独立于其他帧进行编码。这意味着一个I帧可以完全重建出一个完整的图像,而不......
  • 编程语言与字符编码
    聊聊在编程语言中的字符,例如Java‍一个字符占多少个字节?得看情况,不同编码下情况不同。这里引用肖国栋大佬的知乎回答:具体地讲,脱离具体的编码谈某个字符占几个字节是没有意义的。就好比有一个抽象的整数“42”,你说它占几个字节?这得具体看你是用byte,short,int,还是long来......
  • 编码在网络安全中的应用和原理
    什么是编码,为什么要有编码?众所周知,计算机只能够理解0和1,也就是二进制。可是我们的世界0和1以外,还有太多太多的符号和语言了,这时候,我们通过人为的规定一种0和1的排列组合顺序为某一种符号或者语言,这就是编码。是一种人为的规定的一种映射集合。想要了解网络安全,学习网络安全知......
  • linux - curl
    curl(commandlineuniformresourcelocator),URL命令行,用于发送http请求场景:项目运维过程中,如果没有postman工具,会用到这些命令;docker容器内,如果没有开放端口,只能进容器内用curl进行测试了。#不带有任何参数时,curl默认发出GET请求。curlhttps://www.baidu.com......
  • 如何修改 Git 远程仓库 URL
    修改Git远程仓库URL是一个常见的操作,特别是在远程仓库地址发生变化时。以下是操作步骤:查看当前远程仓库URL首先,你可以使用gitremote-v查看当前配置的远程仓库URL:gitremote-v运行该命令后,你会看到类似下面的输出,其中origin是默认的远程仓库名称:originhttps:/......
  • Java设置JSON字符串参数编码
    1.如何在Java中创建JSON字符串在Java中创建JSON字符串,我们可以使用多个库,其中最流行的是Jackson、Gson和org.json。以下是使用这些库创建JSON字符串的示例:1.1使用Jackson库(1)首先,确保我们的项目中包含了Jackson的依赖(如果我们使用Maven,可以参考前面的示例)。(2)创建一个Java对象(例......