1、 Decoder解码与Encoder编码
- decoder将字符数组转换成字符串(反序列化其实就是解码)
- encoder将字符串换成字符数组转(序列化其实就是编码)
- 在开发工作,前后端推荐使用UTF-8字符集编码
2、 字符集简要
- 在很多空间都是用ISO-8859-1编码,主要是西方人的用法(习惯)
- 字节是字符的一种表示单位
- 某个文件存储在系统磁盘上都有一个编码(要点)
//jdk1.8的包列出系统所有可用的字符集
Charset.availableCharsets().forEach( (k,v) ->{
System.out.println( k + " , " + k);
});
3、 ASCII
- ASCII American Standard Code For INformation Interchange 美国信息交换标准代码,以 7 bit 来表示一个字符,共计可以表示128中字符,即: 2的7次方
4、 ISO-8859-1
- ISO-8859-1是以8bit表示一个字符,即用一个字符byte,8 bit来表示一个字符,供计可以表示256个字符
5、 为什么使用ISO-8859-1有时是乱码,有时是正确的中文
6、 GB2312、GBK、GB18030
- GB2312、国际编制,2个字节表示一个汉字(中国制定标准)
- GBK、对GB2312的升级版
- GB18030对汉字最全的支持字节
7、 Unicode
- Unicode对全世界的国际的字节支持,两个字节表示一个字节,对存储容量有明显的弊端,不同语言所导致空间的浪费
8、 UTF (重点)
- UTF: Unicode Translation Format
- Unicode是一种编码方式,而UTF则是一种存储方式 UTF-8是Unicode的实现方式之一
9、常见编码方式
- UTF-16LE (little endian )小端
- UTF16-BE (Big endian) 大端
- ZERO Width NO-Break Space 用得比较少 ,如: 0XFEFF (BE) , 0XFFFE (LE)
10、 UTF-8
- UTF-8 变长字节表示形式,一般来说,UTF-8会通过3个字符来表示一个中文(重点)
11、 BOM
- BOM (Byte Order Mark )字节标识,有操作系统引起对解析,比较头疼的由来,可能操作心跳是遗留一个bug未解决