1. 常见字符集
计算机内部所有的信息最终都是一个二进制的值,不管是文本信息或者是图像等的其他信息
1.1 文字
计算机内部文字的存储就是提前的约定,1(二进制00000001)代表某个字符,32(二进制00100000)代表空格
1.2 图像
人类已经明白可以通过组合不同比例的红,绿,蓝三种颜色来得到各种各样的颜色,现在的计算机,一般使用32位来表示颜色,4B。前三个B分别代表红,绿,蓝,一个byte中8bit,可以表示256种红,所以3B总共可以表示256 * 256 * 256 = 16777216种颜色,剩下一B用来表示透明度,图片是像素级的小格子组成的因此图片也可以用二进制组成
总之,计算机内部一切都是由二进制组成的
1.3ASCII
上世纪60年代,美国对英文字符,空格等的一系列符号与数字做了对应,一共128个,只占用了一个字节的后7位,第一位为0
1.4 非ASCII编码
- ISO-8859-1:ISO组织在ASCII编码的基础上又制定了一系列的标准来扩展ASCII编码,仍然是单字节编码,最多表示256个字符,但已涵盖了大多数西欧语言
- GB2312:双字节编码,包含6763个汉字
- GBK:国家监督技术局扩展GB2312,加入了更多的汉字,兼容GB2312,用GB2312编码的汉字可以用GBK来解码
1.5 Unicode
因为存在多种编码方式,所以如果编码方式和解码方式不一致的话就会出现乱码情况,因此要解决这个问题就要制定一个将世界上多有符号都纳入其中的编码方式,就是Unicode,现在可以容纳一百多万个符号,每个符号编码都不一样,具体哪个符号对应哪个数字,可以在网上进行查询。
Unicode只是一个符号集对应码,也就是说他只规定了哪个字符对应哪个数字,并没有规定对应的二进制数字如何存储,这是因为Unicode字符存在一个问题,如果采用统一的字节长度存储二进制数字,英文字符前面过多的0会造成浪费,因此根据二进制数字不同的存储方式,可以将Unicode分为以下几种
Unicode只是一个字符集,而具体的编码方案是utf-8,utf-16等,也就是说utf-8,utf-16是Unicode的实现方式
Java种\u+四个十六进制字符(\u转义字符,四个十六进制字符为对应的Unicode编码)
- utf-8,UTF-8 采用变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。节省了存储空间和网络带宽。
- utf-16,采用固定的2个字节,16bit所以utf-16。