字符编码
因为计算机只能存储和处理二进制数,所以自然语言需要经过某种映射关系才能展示在计算机中
字符集:字符的集合
- ASCII字符集:美国常用字符集
- IOS-8859-1字符集:西欧常用字符集
- GB2312字符集:简体中文常用字符集
- GBK字符集:GB2312升级版集
- BIG5字符集:繁体中文常用字符集
- Unicode字符集:全球统一字符集
字符编码:以何种映射规则将字符转换为二进制数
字符解码:以何种映射规则将二进制数转换为字符
- ASCII编码:以7位(bits)表示一个字符
- GBK编码:以GBK字符集为基础,ASCII字符为一个字节,非ASCII字符为两个字节的编码
- BIG5编码:以BIG5字符集为基础,ASCII字符为一个字节,非ASCII字符为两个字节的编码
- ANSI编码:ANSI不是指某种具体的字符编码,而是指当前系统的字符编码
- Unicode编码:以Unicode字符集为基础,所有字符都为两个字节
- UTF-8编码:以Unicode字符集为基础,ASCII字符为一个字节,其他字符为一到三个字节(变长编码),中文字符一般是三个字节
UTF-8是Unicode的一种变种,便于节省空间
URL编码
由于URL中某些字符具有特定含义(=、&等),所以为了避免字符歧义需要对URL进行编码
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public void test(){
//定义一个URL
String url = "http://127.0.0.1:80/test?name=赵&大&土&age=26";
//URL编码
String encode = URLEncode.encode(url, String.valueOf(StandardCharsets.UTF_8));
//URL解码
String decode = URLDecode.decode(encode, String.valueOf(StandardCharsets.UTF_8));
}
Base64编码
Base64编码是二进制数与65个字符(0-9、a-z、A-Z、+、/、=)的映射规则(=字符仅作补位),可以将不可见字符转换为可见字符,最早使用在邮件中传输二进制文件(图片、音视频),因为邮件传输协议只支持ASCII字符
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public void test(){
//定义一个字符串
String str = "我是一个字符串";
//Base64编码
String encode = Base64.getEncoder.encodeToString(str.getBytes(StandardCharsets.UTF_8));
//Base64解码
String decode = Base64.getDecoder.decode(encode.getBytes(StandardCharsets.UTF_8));
}