计算机是由美国人发明的,所以美国人要把他们使用的语言字符告诉计算机,由计算机进行存储,他们将使用的小写字母、大写字母、符号、数字进行边编排,每个对应一个数字,
我们叫一个码点,从数字0开始,由于只有128个,所以码点就由0到127,这就是著名的ASCII码。由于0-127很小,所以一个字节存储足以。这就是为什么a对应的是97等等。。。
但是由于计算机的发展,我们中国也使用计算机,可是ASCII码表上就没有我们中国汉字,这可怎么办呢?所以我们也设计了一套适用中国的编码字符集,也就是我们常见的GBK。
由于汉字量大,所以在设计的时候用两个字节去存储,同时GBK也是兼容ASCII,所以字母数字符号等还是一个字节存储,这个时候就有问题出现了?如果出现了字母加汉字呢?这个时候怎么解码?
例如:n啥n
因为一个字节是8位 即 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
n 啥 n
但是英文字母数字等只有0-127 所以规定一个字节首位都是0 汉字首位是1,所以上面可以是0xxxxxxx 1xxxxxxx xxxxxxxx 0xxxxxxx
n 啥 n
所以解码按照这个规则去解码也就不会出现问题了!
但是新的问题又出现了,世界那么多国家呢?都弄一套自己的码表吗?显然不会?
所以出现了统一的码表,一开始是UTF-32,这个码表规定是每个字符占4个字节,这显然也不合理,因为太浪费了!
所以又出现了UTF-8,这个码表规定是每个字符动态占用一个字节、两个字节、三个字节、四个字节,即有的占用一个字节,有的占用多个字节,最多四个字节,例如英文字母还是占用一个字节,
汉字占用三个字节!
这个时候小伙伴又要问,那我n啥n怎么解码呢?
其实编码的时候也对应了一个规则,即一个字节的首位是0,两个字节的首字节必须是110开头的,剩下字节是10开头的,三个字节首字节是1110,剩下的字节是10开头,四个字节首字节是11110开头,
剩下字节是10开头,只要按照这个规则解码也就可以了。
大部分码表都兼容了ASCII码,但是如果中文用GBK编码,用UTF8解码就会乱码!
标签:编码,字节,字符,xxxxxxxx,码表,解码,所以,ASCII From: https://www.cnblogs.com/tyc123/p/16775472.html