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) 一键处理,省时省力。

💬 暂无评论