本文已参与「新人创作礼」活动,一起开启掘金创作之路。
字符集和字符编码:UTF-8、GBK、ASCII、Unicode的区别
字符集和字符编码
字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。
常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。
ASCII字符集&编码
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。 ASCII字符集使用7位(bits)表示一个字符,共128字符,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。
GBXXXX字符集&编码
为了显示中文,必须设计一套编码规则用于将汉字转换为计算机可以接受的数字系统的数。规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字。连在ASCII里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了。
GB2312或GB2312-80是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局发布。对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB18030汉字字符集的出现。
Unicode
Unicode编码系统为表达任意语言的任意字符而设计,是国际组织制定的可以容纳所有文字和符号的字符编码方案。它使用4字节的数字来表达每个字母、符号,或者表意文字(ideograph)。其用数字来映射字符,浏览器不能直接展示,只能转换成其他格式的编码(UTF-8、GBK)。 Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112(16^4 * 17) 个字符。
GBK与UTF-8之间必须通过Unicode编码才能相互转换
UTF-8
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。
UTF-8:用来解决国际上字符的一种多字节编码,包含全世界所有国家需要用到的字符。通用性比较好。 示例:使用UTF-8编码,如果外国人用英文IE访问中文网站,也能显示中文,不需要中文语言包支持。避免乱码问题
- UTF-8是ASCII的超集。不需要转换和修改就能和UTF-8一起使用。
- GBK与UTF-8之间必须通过Unicode编码才能相互转换。
- UTF-8对于英文使用8位(一个字节)编码,对于中文使用24位(三个字节)编码。
- 一个汉字GBK编码占两个字节,UTF-8编码占三个字节,所以UTF-8对中文来说占用空间要大。