ASCII编码
ASCII占用8位(bit)。8个bit可以表示个字符。
ASCII码只规定了个字符的编码。
ASCII码的问题是字符太少,不能满足世界各国的需要。所以各国其他编码利用剩余的个字符定义各自不同的编码。
GBGBK
汉字GB使用两个字节(16位),最多表示个字符。
一个小于的字符的意义与原来相同,但两个大于的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFEgb中两个字符组成的编码的字符叫做“全角”字符,而原来在号以下的那些就叫”半角”字符了
对GB扩展就得到了GBK,再扩展得到GB(少数民族文字)。
所以,一个字节小于的编码都按照ASCII码查,大于的字节+之后的字节(一共两个字节16位)组成汉字的编码。
所以,“一个汉字两个英文字符”就是这么来的。
Unicode
为了统一一种编码,Unicode出现了。
Unicode目前规划的总空间是17个平面(平面0至16),0x至0x10FFFF。最前面的个字符位,称为基本平面(缩写BMP)。每个平面有个码点。
Unicode只规定了每个字符的码点,到底用什么样的字节序表示这个码点,就涉及到编码方法。
最直观的编码方案就是UTF-32
UTF-32
由于Unicode是0x至0x10FFFF,直接用定长的4个字节来表示对应的字符
U+=0xU+D=0xD这样好处是直观,但是太浪费空间了。
UTF-8
UTF-8是一种变长的编码,从1字节到4字节。
英文字母为1个字节,汉字为3个字节。
Unicode符号范围
UTF-8编码方式
(十六进制)
(二进制)
—————————————————————–
-007F
0xxxxxxx
0080-07FF
xxxxx10xxxxxx
0800-FFFF
1xxxx10xxxxxx10xxxxxx
0001-FFFF
11xxx10xxxxxx10xxxxxx10xxxxxx
Reference字符编码的演变
中国人民通过对ASCII编码的中文扩充改造,产生了GB编码,可以表示多个常用汉字。汉字实在是太多了,包括繁体和各种字符,于是产生了GBK编码,它包括了GB中的编码,同时扩充了很多。中国是个多民族国家,各个民族几乎都有自己独立的语言系统,为了表示那些字符,继续把GBK编码扩充为GB编码。每个国家都像中国一样,把自己的语言编码,于是出现了各种各样的编码,如果你不安装相应的编码,就无法解释相应编码想表达的内容。终于,有个叫ISO的组织看不下去了。他们一起创造了一种编码UNICODE,这种编码非常大,大到可以容纳世界上任何一个文字和标志。所以只要电脑上有UNICODE这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成UNICODE编码就可以被其他电脑正常解释。UNICODE在网络传输中,出现了两个标准UTF-8和UTF-16,分别每次传输8个位和16个位。于是就会有人产生疑问,UTF-8既然能保存那么多文字、符号,为什么国内还有这么多使用GBK等编码的人?因为UTF-8等编码体积比较大,占电脑空间比较多,如果面向的使用人群绝大部分都是中国人,用GBK等编码也可以。