计算机中,用二进制0 1表示信息。每个表示0 1的二进制位为bit。
8个bit组成一个字节。可以表示2^8=256种可能。
eg:说ipv4的地址是由4个字节组成。就是0-255用一个字节表示,四位就是四个字节。
ASCII编码
美国制定的一套字符集编码。
用一个字节的后7位,表示128个不同的字符。第一位都为0。如32表示空格,65表示A
可是,当用asc2表示世界上其他语言时,一个字节,即使用上第一位,也不够。于是出现了许多他编码,如GB2312,规则不一。
为了让计算机认识各种语言,出现了统一的编码集Unicode。
Unicode
Unicode收录了全部的字符,并统一编号。但他之规定了字符的二进制编号,却没规定改如何存储。
有时,一个字符需要3,4个字节才能存储,而英文字母1个字节就能存储,因此unicode有两个问题:
1、计算机如何区分是unicode还是asc2?比如三个字节放一起,是解释成3个asc2的字符,还是1个unicode字符?(这也就是为啥java io中分字符类和字节类了)
2、1个英文字母,要使用3,4个字节存储,太浪费了。。
UTF-8
utf8出现了,并统一了编码规范。UTF-8是Unicode实现方式的一种。其他的utf-16,utf-32也有,但基本不被使用。
utf-8是1-4个字节变长的,也就是根据实际需要存储。
utf-8规则:
1、对于1字节的字符,第一位是0,后面7位是对应unicode编码,与asc2是一样的
2、对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
许多编辑工具可以查看编码方式,并根据算法互相转化编码。
以上为学习阮一峰老师博客笔记。
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html