x-www-form-urlencoded 是什么东西?
不知道这么长的名字是谁起的,意思就是在web中传输的非ASCII字符需要进行编码
为什么非ascii字符需要编码?
ascii字符就128个,全世界的各种语言的文字这么多,128个肯定是编码不过来,于是后来人们发明了unicode,全世界所有的文字都可以用Unicode的来唯一编码,但是unicode编码有时候占用字节过多太浪费,于是人们又发明了UTF-x(8,16...)来做个折中的效果,但是在web已经发明的时候,unicode还没有普及使用,所以当时的web还是仅仅支持ascii字符,后来虽然普及了,但是为了和之前的系统做兼容,所以规定了url中的字符必须都是ascii的一个子集,
A-Z
a-z
0-9
- _ . ! * ' ( )
其他还有 / &+= ; $ %这几个标点符号字符也是可以在url中使用,但是他们表示有特殊的含义,如果作为普通字符来看,这些标点字符也要编码,否则都做特殊含义来解释
除此之外的所有字符都要编码,即 %两位的十六进制数
空格是个特殊情况,可以编码为%20,也可以编码成+
URLEncoder 和 URLDecoder
用来给url编码和解码,URLEncoder 有个问题,他会把url中所有的字符都编码一遍,即使/本来是表示的分割符,不需要编码,他也会编码,所以使用的时候需要一段一段的编码再拼起来,不可以整体去编码,URLDecoder可以整体来解码,因为他只会去解码 %两位16进制的,其他的不会动
System.out.println(URLEncoder.encode("http://www.baidu.com","utf-8"));
http%3A%2F%2Fwww.baidu.com
网友评论