URL 编码解码:什么是百分号编码,在线 URL 转码工具怎么用
# URL 编码解码:什么是百分号编码,在线 URL 转码工具怎么用
日常开发中经常遇到这种场景:URL 里有中文、空格、特殊字符,请求报错;或者从抓包工具里看到一堆 `%E4%B8%AD%E6%96%87` 看不懂。这背后就是 URL 编码(也叫百分号编码)。今天讲清楚原理,再推荐一款在线工具。
## 什么是 URL 编码
URL 编码(URL Encoding / Percent-Encoding)是把 URL 中的非 ASCII 字符和保留字符,转换成 `%` 加两位十六进制数表示的规则。
例如汉字「中」的 UTF-8 编码是 `E4 B8 AD`,URL 编码后就变成 `%E4%B8%AD`。空格通常编码成 `%20` 或 `+`。
为什么需要?因为 URL 协议最初只允许 ASCII 字符,中文、emoji、空格等字符直接放进去会导致解析歧义甚至请求失败,所以必须先编码再传输。
## 常见需要编码的字符
| 类型 | 示例 | 编码结果 |
|------|------|---------|
| 中文 | 中 | %E4%B8%AD |
| 空格 | (空格) | %20 |
| 问号 | ? | %3F |
| 井号 | # | %23 |
| 百分号 | % | %25 |
| 与号 | & | %26 |
| emoji | 😀 | %F0%9F%98%80 |
注意:`?` `#` `&` 在 URL 中有特殊语义,作为参数值时必须编码,否则会被解析器截断或拆分。
## 在线 URL 编码解码工具
我们开发的 [URL 编码解码工具](https://zjunwei.com/seo-tools/url-encoder.html) 免费使用,浏览器本地处理,支持:
- **编码**:输入中文或特殊字符,一键转成百分号编码格式
- **解码**:粘贴 `%E4%B8%AD%E6%96%87`,一键还原成可读文本
- **自动识别**:无需手动选择,工具自动判断当前输入是普通文本还是已编码内容
适合场景:拼接带中文参数的链接、调试接口、分析抓包数据、处理搜索关键词。
## 编程语言里怎么做
了解在线工具之余,也列一下主流语言的内置方法:
```javascript
// JavaScript
encodeURIComponent("中文 测试"); // %E4%B8%AD%E6%96%87%20%E6%B5%8B%E8%AF%95
decodeURIComponent("%E4%B8%AD%E6%96%87"); // 中文
```
```python
# Python
from urllib.parse import quote, unquote
quote("中文") # %E4%B8%AD%E6%96%87
unquote("%E4%B8%AD%E6%96%87") # 中文
```
```bash
# Shell
echo -n "中文" | xxd -p | sed 's/\(..\)/%\1/g'
```
## 常见问题
**Q:URL 编码和 Base64 编码有什么区别?**
A:URL 编码是给 URL 传输用的百分号编码,结果仍是可读字符;Base64 是把二进制转成 64 个字符集的文本编码,用途完全不同。
**Q:`%20` 和 `+` 都能表示空格,用哪个?**
A:在 URL 路径里用 `%20`;在 `application/x-www-form-urlencoded` 表单体里用 `+`。混用会导致部分服务端解析错误。
**Q:中文文件名下载乱码怎么办?**
A:把文件名做 URL 编码后放进 `Content-Disposition` 响应头,浏览器就能正确识别。
## 总结
URL 编码是 Web 开发的基础操作,遇到中文参数乱码、特殊字符报错,直接用 [URL 编码解码工具](https://zjunwei.com/seo-tools/url-encoder.html) 一键处理,省时省力。
💬 暂无评论