网址里的百分号编码是什么?

网址里出现 %E4%B8%AD 这样的片段,不是乱码,而是把中文按字节写成了十六进制。网址能直接使用的字符很少,其余都要这样转写。

网址的字符集是有限的。字母、数字和少数几个符号可以直接写,其余字符——中文、空格、大部分标点——都要先转成字节,再写成百分号加两位十六进制的形式。

转换顺序是:先编码成字节,再逐字节转写。一个汉字在 UTF-8 里占三个字节,“中”是 E4 B8 AD,写进网址就是 %E4%B8%AD。所以中文网址看起来格外长,一个字要占九个字符。

空格是个特例。在网址里写成 %20;在表单提交的数据里,空格常写成加号。两种写法在各自场景下都算标准,但不能混用。

还有一个容易忽略的点:斜杠、问号、井号这些字符本身是网址的结构符号,当它们作为内容出现时也必须编码,否则浏览器会把它们当成结构的一部分。第 171 期讲过的井号就是典型——它一出现,后面的内容全被当成片段。

这层编码多数时候由浏览器自动完成,用户看不到。但当它出错时,表现就是打不开、参数丢失,或者中文变成一串百分号。第 170 期讲过的中文邮箱地址,卡住的也是同一类编码与兼容问题。