字符集、字符编码编码总结:ANSI、UNICODE、MBCS、ASCII等等

本文介绍了字符集与字符编码的概念,包括ASCII、GB2312等单字节字符集,多字节字符集如GBK、BIG5,以及Unicode和UTF-8、UTF-16、UTF-32等编码形式。重点讨论了字符集的发展历程,以及Unicode作为全球统一字符编码的重要性。此外,还提到了代码页和Unicode编程实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、字符集与字符编码

二、字符集的发展

1. 单字节字符集(SBCS)

2. 多字节字符集(MBCS)

3. 宽字节字符集(Unicode)

三、UTF - Unicode/UCS Transformation Format

1. UTF-8

2. UTF-16

3. UTF-32

四、代码页(Code Page)

五、Unicode编程


一、字符集与字符编码

字符集(英文名:Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。

计算机要准确的处理各种字符集文字,就需要进行字符编码(英文名:Character encoding),以便计算机能够识别和存储各种文字。字符编码也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的编码方式有:ASCII、GB2312、BIG5、Unicode(UCS-2,UCS-4)、UTF-8和BASE64等等。

简单说:

  • 字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)
  • 字符编码:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)

例如:Unicode 是「字符集」,UTF-8 是「字符编码」。

在Unicode出现以前,字符集与字符编码是没有区分的。例如ASCII、GB2312、GBK、BIG5等等标准即是字符集,也是字符编码。

二、字符集的发展

计算机字符集可归类为三种,单字节字符集(SBCS)、多字节字符集(MBCS)和宽字符集(Unicode字符集)。

1. 单字节字符集(SBCS)

单字节字符集,称之为SBCS,它的所有字符都只有一个字节的长度。常见字符集有:ASCII码和扩展ASCII码。SBCS字符串由一个零字节结尾,数据类型是char。

ASCII:目前计算机中用得最广泛的单字节字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。ASCII码适用于所有拉丁文字,它用7位二进制数进行编码(其最高位(bit7)被用做奇偶校验位),可以表示128个字符。

第0~32号及第127号(共34个)是控制字符或通信专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等。

第33~126号(共94个)是字符,其中第48~57号为0~9 10个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

参考:ASCII码 - 基本的ASCII码和扩展的ASCII码,最全的ASCII码对照表

2. 多字节字符集(MBCS)

当非拉丁语国家人民使用计算机时,需要将他们自己使用的文字(字符)进行编码。此时ASCII码占用1个字节预留的空间(128~255)就不够用了。因此,非拉丁语国家对自己的文字进行编码时,通常采用在ASCII基础上扩展,并用多个字节表示一个字符。这种字符集就叫多字节字符集。同SBCS一样,MBCS字符串也由一个零字节结尾,数据类型也是char。

例如聪明的中国人民为了解决汉子编码时想到了这样的办法。我们不客气地把那些127号之后的奇异符号们直接取消掉, 规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都重新编了两个字节长的编码,这就是常说的“全角”字符,而原来在127号以下的那些就叫“半角”字符了。中国人民看到这样很不错,于是就把这种汉字方案叫做 “GB2312”。GB2312 是对 ASCII 的中文扩展。但是中国的汉字太多了,我们很快就发现有许多人的人名没有办法在这里打出来,特别是某些很会麻烦别人的国家领导人。于是我们不得不继续把GB2312 没有用到的码位找出来老实不客气地用上。后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为GBK 标准,GBK包括了GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。 后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK扩成了 GB18030

类似的,其他的国家和地区也在ASCII码基础上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值