1.ASCII 码 ascii用来在计算机中表示 数字 英文字符 和 控制符号,ascii码共有128个元素 这128个元素用一个字节表示(一个字节8bit) 因为2的7次方是128,所有只用1个字节当中的后七位就可以表示这128个元素,其中最高位一 直是0. ascii 如果利用一个字节(byte)的8位,也只能对应256(0-255)个要表示的对象,但是256对于人类要表示的符合完全不够,所以我们不能停留在byte这个数据结构上,我们要一个新的数据结构来解决这个问题,比如charchar的大小可以是两个字节但是计算机碰到char ,如何去解析他要表示的字符,那么我们就需要事先规定char到byte的编码方式,例如uft-8,uft-16,编码方式描述的是byte到char的转化规则。根据这个规则计算机去识别char到底表示的是什么字符。例如uft-16统一用两个字节表示一个字符(定长)例如uft-8用1到6个字节表示一个字符(变长)用UTF-16表示"汉" 假如用UTF-16表示的话就是0110110001001001(共16bit,两个字节).程序解析的时候知道是UTF-16就把两个字节当成一个单元来解析.这个很简单.用UTF-8表示"汉" 用UTF-8就有复杂点.因为此时程序是把一个字节一个字节的来读取,然后再根据字节中开头的bit标志来识别是该把1个还是两个或三个字节做为一个单元来处理.0xxxxxxx,如果是这样的01串,也就是以0开头后面是啥就不用管了XX代表任意bit.就表示把一个字节做为一个单元.就跟ASCII完全一样.110xxxxx10xxxxxx.如果是这样的格式,则把两个字节当一个单元1110xxxx 10xxxxxx 10xxxxxx如果是这种格式则是三个字节当一个单元.这是约定的规则.你用UTF-8来表示时必须遵守这样的规则.我们知道UTF-16不需要用啥字符来做标志,所以两字节也就是2的16次能表示65536个字符.而UTF-8由于里面有额外的标志信息,所有一个字节只能表示2的7次方128个字符,两个字节只能表示2的11次方2048个字符.而三个字节能表示2的16次方,65536个字符.由于"汉"的编码27721大于2048了所有两个字节还不够,只能用三个字节来表示.但是在java 中 char是两个字节,因为java采用unicodeUTF-32、UTF-16 和 UTF-8 是具体的实现方案。Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)。