1. URL编码的前世今生
第一次在浏览器地址栏里看到"%E4%BD%A0%E5%A5%BD"这样的字符串时,我盯着屏幕愣了半天。这串看似随机的字符,其实是"你好"经过URL编码后的结果。就像邮局要求包裹必须用标准纸箱包装一样,URL编码就是给特殊字符穿上标准"外衣",让它们能在互联网上畅通无阻。
早期的URL规范(RFC 1738)规定URL只能包含ASCII字符集中的特定字符。这个限制源于互联网发展初期的技术约束——当时的系统和网络设备对非ASCII字符的支持非常有限。想象一下,如果URL允许直接使用中文、空格或特殊符号,就像用不同形状的包裹投递邮件,分拣系统很可能会崩溃。
URL编码采用了一种聪明的解决方案:用百分号(%)加上两位十六进制数表示一个字节。例如:
- 空格可以表示为%20(ASCII码32的十六进制)
- 加号+表示为%2B
- 中文字符用UTF-8编码后,每个字节都转换为%XX形式
// 简单示例:编码包含空格的字符串
String original = "Java 编程";
String encoded = URLEncoder.encode(original, "UTF-8");
System.out.println(encoded); // 输出:Java+%E7%BC%96%E7%A8%8B
有趣的是,在URL编码的发展过程中,出现了两个主要标准:
- application/x-www-form-urlencoded格式(用于表单提交)
- RFC 3986标准(用于通用URI)
它们最明显的区别在于对空格的处理:前者将空格转为加号(+),后者转为%20。这种差异虽然微小,但在实际开发中可能引发各种"坑",我们稍后会详细讨论。
2. Java中的URL编码核心机制
Java提供了URLEncoder和URLDecoder这对工具类,它们位于java.net包中,用起来看似简单,但藏着不少细节

5484

被折叠的 条评论
为什么被折叠?



