Byte
byte是8位2进制,所有的数据都是由byte组成,如:
图片是一连串的byte
ASCII字符”A”是一个byte
可以说byte是我们的原始数据
编码
如下问题:
这是2个byte“01100010 00010001”,它代表了什么?
答案:
如果没有指明编码,那他什么都不代表
在ASCII编码规则中指明:“01100010”代表”b”,”00010001”代表控制字符VT
所有你可以认为这2个byte是b+VT
在Unicode编码中指明“01100010 00010001”代表汉字“我”
所有你也可以认为这2个byte是我
编码是约定好的,物理在Linux还是Window,其编码的byte都是相同的
ASCII编码
ASCII属于字符编码
ASCII以一个byte进行编码,从0-127(即00000000-01111111),分别代表不同的字符,
如97(01100001)代表a
Unicode字符集
Unicode字符集对全世界的字符进行了编号,如25105(十进制)代表汉字“我”
ASCII字符的位置在Unicode字符集还是一样(即0-127与ASCII编码相同)
Unicode编码(UTF-16)
标准的Unicode编码称为UTF-16
Unicode编码直接以Unicode字符的编号进行编码
Unicode编码以2个byte进行编码,如“01100010 00010001”(25105)代表汉字“我”
2个byte最多只能编码6万多个字符,因此新版本的Unicode以4个字节进行编码
UTF-8编码
UTF-8基于Unicode字符集
UTF一个字符编码使用的byte不固定,1-8个byte不等
一个英文UTF-8字符占1byte,一个汉字占3byte
UTF-8部分编码规则如下,其中xxxx就是Unicode字符的编号:
1字节 0xxxxxxx (编号小于127(即111 1111)使用一个字节,)
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
UTF-32编码
UTF-32基于Unicode字符集,直接以Unicode字符的编号进行编码
UTF-32使用固定4个byte对Unicode字符集进行编码
Base64
问题:
11110111这个byte我像以字符的形式保存,但这个byte在ASCII,Unicode,UTF-8中均找不到对应的字符编码,怎么办?
Base64是一种转换规则,其将3个byte分成4个组,每组6位,然后将这4个6位对照Base64编码表,如:010011对应T,以T的ASCII码对应的byte进行存储
Base64可以将任意的byte转成的可显示ASCII,这有利与我们对一些非字符编码的数据转成ASCII字符进行保存或传输
image/jpeg
image/jpeg是jpg图片的编码格式,其保存的是一系列的byte
如何在两个服务器之间传输jpg图片?
我们读取图片(即读取一系列的byte),然后将这些byte发给对方,并告诉他这是image/jpeg编码格式(即这是一张jpg图片),对方服务器可以原封不动的将这些byte保存到一个文件中,并将文件的后缀改为 .jpg即可