字符编码(ASCII GBK UTF-8等)

ASCII码

标准字符集

最初的计算机只是美国为首的西方发达国家在用,在他们的语言中,主要以26个英文字符为主,加上大小写、空格和其他一些标点符号等,一共有127个字符,所以大家约定用一种标准来定义这些编码,也就是ASCII码(American Standard Code for Information Interchange,美国信息互换标准代码)。而一个字节有八位,也就可以表示256个字符(2^8),所以一个ASCII码用一个字节就可以表示了。

扩展字符集

后来,世界上其他国家也开始使用计算机,然后这些国家的语言中的很多字符在标准ASCII码中并没有,所以,他们就要想办法增加自己的字符。又发现一个字节有256个字符,标准ASCII码只有127个字符,所以,他们就用127号往后的空位来表示他们的新的字符,形成了一个新的标准,叫做ASCII码的扩展字符集。

GB2312

当中国人开始使用计算机后,ASCII码中已经没有空位来给我们用来表示汉字了,况且,常用的汉字有6000多个,一个字节是无论如何不够我们使用的了。于是,我们便将127号以后的字符全部取消掉,并规定一个小于127的字符的意义跟以前相同,但是两个大于127的字符连在一起时,就表示是一个汉字,高字节从0xA1到0xF7,低字节从0xA1到0xFE,这样我们就能组合出7000多个简体汉字。并且在这些编码里,我们还把数字符号、罗马字母等都编写进去了,还把原来ASCII里本来就有的数字、标点、字符都统统重新编写了两个字节的编码,就是“全角”,而原本127号一下的就叫“半角”。这种规范叫做GB2312。

GBK

但是中国的汉字是在太多了,特别是有些人名(国家领导人的名字)没有包含在GB2312中,就干脆不再要求低字节也必须是127号之后了,只要高字节大于127就固定表示这是一个汉字的开始,结果扩展后的标准叫做GBK标准,GBK包括了GB2312的所有内容,同时又增加了近20000个汉字(包括繁体字)和符号。

GB18030

后来少数民族也要用计算机,又多了几千个少数民族的字,GBK就扩展成了GB18030。中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做 "DBCS"(Double Byte Charecter Set 双字节字符集)。这时一个汉字算两个英文字符!

UNICODE

当时各个国家都像中国一样搞出来这样一套标准,结果就是谁也不懂谁的编码,谁也不支持别人的编码,就连台湾地区都搞出一套big-5标准。所以ISO组织便出面解决这个问题,解决办法就是废除所有的地区性编码方案,重新搞了一个包括地球上所有文化、字母和符号的编码,叫做"Universal Multiple-Octet Coded Character Set",简称 UCS, 俗称 "UNICODE"。
ISO规定,必须用两个字节,也就是16位统一表示所有字符,对于ASCII码中的“半角”字符,UNICODE保持不变,只是将原来的长度从8位扩展到了16位,其他国家的重新编码。至此,所有的字符(不管是汉字还是英文)都是一个字符,两个字节。
但是,UNICODE 在制订时没有考虑与任何一种现有的编码方案保持兼容,这使得 GBK 与UNICODE 在汉字的内码编排上完全是不一样的,没有一种简单的算术方法可以把文本内容从UNICODE编码和另一种编码进行转换,这种转换必须通过查表来进行。

UTF-8

UNICODE 来到时,一起到来的还有计算机网络的兴起,UNICODE 如何在网络上传输也是一个必须考虑的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现了,顾名思义,UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE到UTF时并不是直接的对应,而是要过一些算法和规则来转换。中文UTF8大多是三字节

你可能感兴趣的:(字符编码(ASCII GBK UTF-8等))