package demo.network.other;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Arrays;
class URL编码解码 {
public static void main(String[] args) throws UnsupportedEncodingException {
byte[] bytes = "你好".getBytes("UTF-8");
System.out.println("UTF-8:" + Arrays.toString(bytes));//[-28, -67, -96, -27, -91, -67]
String URLCode = URLEncoder.encode("你好", "UTF-8");
System.out.println("URL编码:" + URLCode);//%E4%BD%A0%E5%A5%BD
System.out.println("URL解码:" + URLDecoder.decode(URLCode, "UTF-8"));//你好
//自定义 转化UTF-8编码字节 为 URL编码
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
bytes[i] += 256;
String hexString = Integer.toHexString(bytes[i]);//ffffffe4
hexString = hexString.substring(hexString.length() - 2, hexString.length());//e4
hexString = hexString.toUpperCase();//E4
sb.append("%" + hexString);
}
System.out.println(sb);//%E4%BD%A0%E5%A5%BD
}
}
/**
* 3. URL编码
* 表单的类型:Content-Type: application/x-www-form-urlencoded,就是把中文转换成%后面跟随两位的16进制。
* 为什么要用它:在客户端和服务器之间传递中文时需要把它转换成网络适合的方式。
* <p>
* * 它不是字符编码!
* * 它是用来在客户端与服务器之间传递参数用的一种方式!
* * URL编码需要先指定一种字符编码,把字符串解码后,得到byte[],然后把小于0的字节+256,再转换成16进制。前面再添加一个%。
* * POST请求默认就使用URL编码!tomcat会自动使用URL解码!
* * URL编码:String username = URLEncoder.encode(username, "utf-8");
* * URL解码:String username = URLDecoder.decode(username, "utf-8");
* <p>
* 今后我们需要把链接中的中文参数,使用url来编码!今天不行,因为html中不能给出java代码,但后面学了jsp就可以了。
*/