其他分享
首页 > 其他分享> > 计算机字符编码简单梳理

计算机字符编码简单梳理

作者:互联网

ASCII

ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其西欧语言。

码表如下:

观察表可得出:

由此规律,若告诉大写X的二进制码为0101 1000,则直接得出小写x的二进制码为0111 1000

GB2312-80

为使中国汉字也可在计算机上表示出来,1980年国家标准局发布了GB2312-80编码

区位码

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

01-09区收录除汉字外的682个字符

10-15区为空白区,没有使用

16-55区收录3755个一级汉字,按拼音排序

56-87区收录3008个二级汉字。按部首/笔画排序

88-94区为空白区,没有使用

可通过区位码查询自己了解一下

例如:

image-20220225111108308

可得的区位码为4650

国标码

在区位码设计时,为将ASCII码中英文数字之类包含在内,将非中文字符放在了01-09区,可问题是还有32个控制通信字符没有考虑在内

因此,将区码和位码均偏移32位,即都加上20H

那为什么区码和位码都要加20H呢,因为英文采用ASCII码,0-127个字符,即2的7次方个字符,占了7位,最高位补0,满8位位一个字节。例如我向朋友发送字符A,在机器码中则表示为0100 0001。而区位码的存在,使得表示中国汉字需要两个字节,因此,每个字节都要加上20H,给32个特殊字符让出位置

因此的区位码4650(2E32)转化为国标码为4E52(2E+20 32+20)

机内码

在前面提到过,A占一个字节,8位二进制数为0100 0001,最高位0是一个标识,表示这是一个ASCII码

而国内码转化为二进制流后,为避免与ASCII码发生冲突,则将最高位定位1,这样1100 0001就代表着一个GB2312编码,计算机就不是将其判定为ASCII码

因此在国标码的基础上,区码和位码均加上1000 0000即80H

因此的机内码为CED2(4E+80 52+80)

可用Python验证一下:

image-20220225115714900

image-20220225115734224

与我们计算的完全一致!

GBK和UTF-8

随着互联网发展,GB2312编码不能够满足中国字符的表达(中国汉字有上万个),因此在GB2312的基础上,做出了扩展,这里不做深究了。

世界上国家太多了,一个国家一套编码不太现实。这个世界从来都是有需求就有供应。这时候,为拯救你的硬盘和流量,ISO(International Organization for Standardization)国际标准组织就站出来要融合世界所有字符,经过长期的发展,形成了UTF-8编码

UTF-8编码盛行的当下,gb2312和gbk编码亦有着广泛的使用…

标签:编码,字符,二进制,区位码,汉字,ASCII,梳理
来源: https://blog.csdn.net/m0_52038897/article/details/123130263