字符编码
字符编码也称字集码
编码方式与解码方式是一一对应的
使用对应的编码方式进行编码和解码才可得到原始的数据
字符编码: 把字符集中的字符编码为指定集合中某一对象
一般情况的编码方式即为编码实现的方式
ASCII 编码
Unicode 编码
Unicode 的实现方式不同于编码方式,一个字符的 Unicode 编码是确定的,但是在实际传输过程中,由于不同系统平台在设计上的差别、以及出于节省空间的目的,Unicode 编码的实现方式有所不同
实现方式
-
UTF-16
UTF-16 编码使用 2 个字节来对一个字符进行编码,所以对于 UCS-2 中的字符(65536 之内),可以直接编码,无需进行任何转换
UTF-16 编码的另一个作用是可以通过代理对的编码机制,使用变长的方式支持 4 个字节(65536 及以上)的字符
UTF-16 编码至少使用 2 个字节进行编码,所以存在字节序的问题,即高字节在前(Big-Endian )、还是低字节在前(Little-Endian )
-
UTF-8
UTF-8 采用变长(1-3 个字节)的方式来表示 65536 以内的基本字符
对于 127 以内的字符仅使用一个字节进行编码,能够节省空间
Base64编码
在 XML 文档中直接表示和存储二进制数据
编码方式
-
把每三个 8Bit 的字节转换为四个 6Bit 的字节(38 = 46 = 24),共26种情况即上图的64种情况
-
然后把 6Bit 再添两位高位 0
-
组成四个 8Bit 的字节(即一个int的长度)
比如 00001010 11001010 01101100 将分解为000010、101100、101001、101100,每6Bit高位补0,然后查表,将转换为C、s、p、s。
在将二进制的数转换为 Base64 编码时,以每 3个字节为单位进行转换,但是,二进制数的长度并不一定是 3 字节的整数倍。因此需要=
例:00001010 11001010 01101100 00001010
(1) 分解为000010、101100、101001、101100、000010、000010 (后面缺了两个字节)
为000010、101100、101001、101100、000010、000010 (后面缺了两个字节)
(2) 使用=代替空缺字节:CspsCC==