深入理解Java字符集编码和解码

1、 Decoder解码与Encoder编码

  • decoder将字符数组转换成字符串(反序列化其实就是解码)
  • encoder将字符串换成字符数组转(序列化其实就是编码)
  • 在开发工作,前后端推荐使用UTF-8字符集编码

2、 字符集简要

  • 在很多空间都是用ISO-8859-1编码,主要是西方人的用法(习惯)
  • 字节是字符的一种表示单位
  • 某个文件存储在系统磁盘上都有一个编码(要点)
//jdk1.8的包列出系统所有可用的字符集
 Charset.availableCharsets().forEach( (k,v) ->{
    System.out.println( k + " , " + k); 
 });
Charset

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未解决

你可能感兴趣的:(深入理解Java字符集编码和解码)