bit:位(比特)。一个二进制位,计算机中二进制的0和1大小就是1bit。
byte:字节。1byte = 8bit。比如字母a的ASSIC码十进制表示是97,是用二进制表示是0110 0001,用了8个bit表示,所以说a大小是1个字节。
PS:家里装宽带,运营商说是100M的,可是用户测速发现远没有那么高。其实运营商是按bit说的。而用户测试的下载速度是按字节byte说的,两方都没错。所以有8倍的差距,粗略估计就是10倍的差距。
Unicode是字符集,UTF-8是编码方式
1、Unicode是字符集,世界上的所有符号文字,都可以在这个字符集里找到对应的编号。
由于早期计算机只是欧美使用,8个二进制的0和1可以表示256个字符了,无论英语的26个大写字母、小写字母、数字、标点符号、机器指令等完全可以表示了。在计算机中遇到一串010101,每8个截取一下,就表示一个字符,这完全没问题。
后来计算机发展,世界各国都需要把本国文字可以在计算机表示,比如常用汉字就几千个,256个字符肯定不够用,只能另想办法。比如GBK编码。
后来ISO制定了字符集,就是Unicode。原来8位表示一个字符不够用了,就用16位表示,原来的小于128的字符就在前面补零。
比如a的Unicode编号就是0000 0000 0110 0001,总共16位。
不过这种方式造成了极大的浪费。对英文来说,存储空间多了1倍。
2、所以后来有聪明人规定了编码方式UTF-8,方便传输和存储。
对于Unicode中每个范围的字符,通过变换长度来一一对应。
UTF-8编码规则如下:
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
查找的时候,根据开头形式就知道需要截取的范围,就确定了字符。比如看到110开头的数据,就知道从110开始截取,截取16位,就确定了一个字符。
网友评论