最开始计算机在使用英文的国家被发明,英文字母有限,再加上一些特殊符号,用127个8位二进制就可以表示完,这就是【ASCII码】。其中0x20以下的编码称为“控制码”,类:0x10 换行 0x07 发出蜂鸣声
后来计算机普及到世界各地,很多国家用的不是英文,于是将127号后的空位来表示其他的字母、符号,还加入了平时要用到的横线、竖线等形状,这样一直排到最后一个状态255。从128~255这一页字符集就被称为“扩展字符集”
计算机来到我大中华时,已经没有足够空余的字符来表示汉字了。于是就把127号后面的符号取消掉,规定:一个小于127的字符表示的内容不变,两个大于127的字符连在一起就表示汉字(前一个字节称为高字节从0xA1到0xF7,后一个称为低字节从0xA1到0xFE)。这些编码还把数字符号、罗马希腊字母、日本的假名都编进去了,还把原来在ASCII里的数字、符号重新编码成两个字节长的,这就是常说的【全角】字符,而原来127号以下的就叫【半角】字符。这样的汉字方案叫做【GB2312】,是对ascii的汉字扩展
在日常应用中发现中国的汉字有一本新华字典辣么多,区区几千个字符怎么表示得完,为了扩展更多的字符,规定:只要第一个字节大于127就固定表示一个汉字。这种编码被称为【GBK标准】,在GB2312的基础上扩展了20000个汉字(包括繁体字)和符号。
为少数民族的使用,加了几千个新的少数名族字,GBK扩成【GB18030】
unicode编码规定:所有字符都用2个字节(16位)来表示,原ascii码中的半角字符,低位不变,高8位永远是0。这样保存英文时就会浪费多一倍空间。
此时出现的问题是,怎么分辨unicode码和ascii码?还有英文存储永远都浪费了一倍的空间。
所以unicode在很长一段时间都无法推广,直到互联网出现。为解决unicode在网络传输问题,出现了众多的【UTF】(UCS Transfer Format)标准。【UTF-8】就是每次8个位传输数据,【UTF-16】就是每次16个位传输数据。
【UTF-8】就是在互联网上使用最广的一种unicode的实现方式。从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。
它是一种变长的编码方式:
1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;
2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。
这样就形成了如下的UTF-8标记位:
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
原网页链接:https://www.zhihu.com/question/23374078
后来计算机普及到世界各地,很多国家用的不是英文,于是将127号后的空位来表示其他的字母、符号,还加入了平时要用到的横线、竖线等形状,这样一直排到最后一个状态255。从128~255这一页字符集就被称为“扩展字符集”
计算机来到我大中华时,已经没有足够空余的字符来表示汉字了。于是就把127号后面的符号取消掉,规定:一个小于127的字符表示的内容不变,两个大于127的字符连在一起就表示汉字(前一个字节称为高字节从0xA1到0xF7,后一个称为低字节从0xA1到0xFE)。这些编码还把数字符号、罗马希腊字母、日本的假名都编进去了,还把原来在ASCII里的数字、符号重新编码成两个字节长的,这就是常说的【全角】字符,而原来127号以下的就叫【半角】字符。这样的汉字方案叫做【GB2312】,是对ascii的汉字扩展
在日常应用中发现中国的汉字有一本新华字典辣么多,区区几千个字符怎么表示得完,为了扩展更多的字符,规定:只要第一个字节大于127就固定表示一个汉字。这种编码被称为【GBK标准】,在GB2312的基础上扩展了20000个汉字(包括繁体字)和符号。
为少数民族的使用,加了几千个新的少数名族字,GBK扩成【GB18030】
上面的汉字编码,统一称为“DBCS”(Double Byte Charecter Set双字节字符集)。
这时一个汉字算两个英文字符
—————————————————————————————————————————————————
各个地区都发明了适合自己的编码,在国际上就难以很好的交互,于是国际化标准组织(ISO)重新编排了一个编码方案,包括了地球上所有文化、所有字符和符号,这个编码叫做【UCS】"Universal Multiple-Octet Coded Character Set",俗称【unicode】
unicode编码规定:所有字符都用2个字节(16位)来表示,原ascii码中的半角字符,低位不变,高8位永远是0。这样保存英文时就会浪费多一倍空间。
此时出现的问题是,怎么分辨unicode码和ascii码?还有英文存储永远都浪费了一倍的空间。
所以unicode在很长一段时间都无法推广,直到互联网出现。为解决unicode在网络传输问题,出现了众多的【UTF】(UCS Transfer Format)标准。【UTF-8】就是每次8个位传输数据,【UTF-16】就是每次16个位传输数据。
【UTF-8】就是在互联网上使用最广的一种unicode的实现方式。从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。
它是一种变长的编码方式:
1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;
2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。
这样就形成了如下的UTF-8标记位:
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
原网页链接:https://www.zhihu.com/question/23374078