编码算法(URL编码和Base64编码)

URL编码:

URL 编码是浏览器发送数据给服务器时使用的编码,它通常附加在 URL 的参数部 分,例如: https://www.baidu.com/s?wd=%E4%B8%AD%E6%96%87。

之所以使用URL编码,是因为出于兼容性考虑,因为很多的服务器只识别 ASCII 字符,URL拥有一套自己的规则。

例如:

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

public class Test1 {
	public static void main(String[] args) throws UnsupportedEncodingException {
		String ur1 = "http://www.baidu.com/s?wd=";
		String value = "中国";
		
		//对URL中的中文进行编码
		String result = URLEncoder.encode(value,"utf-8");
		System.out.println(result);
		System.out.println(ur1 + result);
		//对URL中的中文进行解码
		String param = "https://www.baidu.com/s?wd=%E6%88%91%E6%9C%AC%E5%B0%86%E5%BF%83%E5%90%91%E6%98%8E%E6%9C%88";
		String content = URLDecoder.decode(param,"utf-8");
		System.out.println(content);
	}

}

Base64编码:

URL 编码是对字符进行编码,表示成 %xx 的形式,而 Base64 编码是对二进制数据进行编码,表示成 文本格式。

例:从文本文件中读取一张图片的Base64编码值,再用Base64解码。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.List;

public class Test2 {
	public static void main(String[] args) throws IOException {
		
		//从文本文件中读取一张图片的Base64编码值
		List<String> lines = Files.readAllLines(Paths.get("D:\\pic\\周杰伦.txt"));
		StringBuilder sb = new StringBuilder();
		for(String ln : lines) {
			sb.append(ln);
		}
		System.out.println(sb.length());
		//Base64解码
		byte[] imageResultByteArray = Base64.getDecoder().decode(sb.toString());
		Files.write(Paths.get("D:\\photograph\\zhoujielun.jpg"), imageResultByteArray);
	}

}

两种编码方式的对比:

import java.util.Arrays;
import java.util.Base64;

public class Test4 {
	  public static void main(String[] args) {
	      // 原始字节内容
		byte[] input = new byte[] { 0x01, 0x02, 0x7f, 0x00 };
			
		// 分别使用两种方式进行编码
		String b64Encode = Base64.getEncoder().encodeToString(input);
	    String b64UrlEncoded = Base64.getUrlEncoder().encodeToString(input);
	        
	     // 结果完全一致
	     System.out.println(b64Encode); 
	     System.out.println(b64UrlEncoded);
	        
	      // 分别使用两种方式进行重新解码
	      byte[] output1 = Base64.getDecoder().decode(b64Encode);
	      System.out.println(Arrays.toString(output1));
	        
	      byte[] output2 = Base64.getUrlDecoder().decode(b64UrlEncoded);
	      System.out.println(Arrays.toString(output2));
	    }

}

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值