URL 编码又叫百分号编码(Percent-Encoding),定义在 RFC 3986 中:把 URL 里不允许直接出现的字符先转成 UTF-8 字节,再把每个字节写成“%”加两位十六进制数,例如空格写成 %20,“中”写成 %E4%B8%AD。下面重点说明Linux、macOS 与 Windows 命令。
URL编码命令行用法
# Python 命令行
python3 -c "import urllib.parse;print(urllib.parse.quote('123问 a&b', safe=''))"
# 输出 123%E9%97%AE%20a%26b
# curl 自动编码表单参数
curl -G --data-urlencode "q=测试 中文" https://example.com/search
示例
输入:<b>粗体</b>
编码结果:%3Cb%3E%E7%B2%97%E4%BD%93%3C%2Fb%3E
说明:按 RFC 3986 编码,空格为 %20,中文按 UTF-8。
与相关技术的区别
encodeURIComponent 编码参数值,会编码 : / ? & = 等;encodeURI 编码整条 URL,保留这些分隔符。Python 的 quote 默认保留“/”,quote_plus 把空格变“+”,适合表单。URL 编码与 Base64 不同:前者只处理不安全字符,可读性好;后者把全部内容都转换。
乱码排查
参数乱码通常是两端字符集不一致:页面用 GBK 编码而服务端按 UTF-8 解码,或者反过来;也可能是重复编码(看到 %25)或少解码一次。
本站的URL编码解码工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【哪些字符不用编码?】字母、数字和 - _ . ~ 四个符号不用编码。
【空格应该编码成 %20 还是 +?】路径和 RFC 3986 规范里用 %20;表单格式(x-www-form-urlencoded)用“+”。不确定时用 %20 更安全。
【为什么中文变成了三组 %XX?】中文按 UTF-8 编码,常用汉字占 3 个字节,每个字节写成一个 %XX。
文中示例可以在本站对应工具中验证;处理密码、证件号等敏感数据时,请注意保护隐私。