字符编码

本文深入探讨了字符编码的概念,详细介绍了ASCLL、GB2312、GBK、GB18030、UTF-16和UTF-8等常见编码方式的特点与应用。解析了各种编码的规则与范围,对比了它们的优缺点。

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

1.什么是字符编码。

字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCLL。其中,ASCLL将字母、数字和其它符号编码,并用7比特的二进制数来表示这个整数(标准的ascll码使用7个二进制位对字符进行编码,对应的ISO标准为ISO646标准)。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。

2.字符编码有哪些。

(1)ASCLL((American Standard Code for Information Interchange):美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其它西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCLL第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止定义了128个字符。

  ASCLL码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准的ASCLL码也叫基础ASCLL码,使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写的字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符,其中:0~31控制字符 如换行、回车、删除 ;           32~126打印字符。

大小规则:

         常见ASCLL码的大小规则:0~9 < A~Z <  a~z

         数字比字母要小。如:“7” <  "F"

         数字0比数字9要小,并按0到9顺序递增。如"3" < "8"

         字母A比字母Z要小,并按A到Z顺序递增。如 "A" < "Z" 

         同个字母的大写字母比小写字母要小32。如“A” < "a"

   几种常见字母的ASCLL码大小:“A”为65;“a”为97;"0"为48

 (2)GB2312:全称为《信息交换用汉字编码字符集》GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB2312。

    基本集共收入汉字6763个和非汉字图形字符682个。整个字符集分成94个区,每区有94个位。每个区位上只有一个字符,因此可用所在的区和位来对汉字进行编码,称为区位码。

  GB2312是双字节编码,总的编码范围是A1~F7   ( A1~A9 符号区    B0~F7 汉字区)

(3)GBK :全称《汉字内码扩展规范》向上支持ISO 10646.1国际标准,是前者向后者过渡过程中的一个承上启下的产物。GBK编码,是在GB2312标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准。

  (4)GB18030:《信息技术中文编码字符集》,是我国计算机系统必须遵循的基础性标准之一。与GB2312兼容。标准采用了单字节、双字节和四字节三种方式对字符编码。单字节部分采用GB/T 11383的编码结构与规则,使用0×00至0×7F码位(对应于ASCII码的相应码位)。双字节部分,首字节码位从0×81至0×FE,尾字节码位分别是0×40至0×7E和0×80至0×FE。四字节部分采用GB/T 11383未采用的0×30到0×39作为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为0×81308130到0×FE39FE39。其中第一、三个字节编码码位均为0×81至0×FE,第二、四个字节编码码位均为0×30至0×39。码位总体结构见图。码位总体结构

(5)UTF-16:具体定义了Unicode字符在计算机中的存取方法。采用2字节来表示Unicode转化格式,它是定长的表示方法,不论什么字符都可以用两个字节表示。

(6)UTF-8编码规则:UTF-8是针对Unicode的可变长度字符编码,又称万国码。UTF-8用1到6个字节编码Unicode字符。用在网页上可统一页面显示中文简体繁体及其它语言。

   编码规则如下:

        如果一个字节,最高位为0,表示这是一个ASCII字符(00~7F)

        如果一个字节,以11开头,连续的1的个数暗示这个字符的字节数     如110xxxxx代表它是双字节UTF-8字符的首字母

        如果一个字节,以10开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节

优点:UTF-8编码可以通过屏蔽位和移位操作快速读写。字符串比较时strcmp()和wcscmp()的返回结果相同,因此使排序变得更加容易。字节FF和FE在UTF-8编码中永远不会出现,因此他们可以用来表明UTF-16或UTF-32文本(见BOM) UTF-8 是字节顺序无关的。它的字节顺序在所有系统中都是一样的,因此它实际上并不需要BOM。

缺点:你无法从UNICODE字符数判断出UTF-8文本的字节数,因为UTF-8是一种变长编码它需要用2个字节编码那些用扩展ASCII字符集只需1个字节的字符 ISO Latin-1 是UNICODE的子集,但不是UTF-8的子集 8位字符的UTF-8编码会被email网关过滤,因为internet信息最初设计为7位ASCII码。因此产生了UTF-7编码。 UTF-8 在它的表示中使用值100xxxxx的几率超过50%, 而现存的实现如ISO 2022, 4873, 6429, 和8859系统,会把它错认为是C1 控制码。因此产生了UTF-7.5编码。 

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值