【转】刨根究底字符编码之三——字符编码的由来

字符编码的由来

 

一、为什么需要对字符进行编码

1.

计算机一开始发明出来时是用来解决数字计算问题的,后来人们发现,计算机还可以做更多的事,例如文本处理。

但计算机其实挺“笨”的,它只“认识”010110111000…这样由0和1两个数字组成的二进制数字,这是因为计算机的底层硬件实现就是用电路的断开和闭合两种状态来表示0和1两个数字的。因此,计算机只可以直接存储和处理二进制数字。

2.

为了在计算机上也能表示、存储和处理像文字、符号等等之类的字符,就必须将这些字符转换成二进制数字。

当然,肯定不是我们想怎么转换就怎么转换,否则就会造成同一段二进制数字在不同计算机上显示出来的字符不一样的情况,因此必须得定一个统一的标准进行转换。

于是就设计出了进行这种转换的标准——字符编码标准。

 

二、EBCDIC码与ASCII码

1.

最开始设计出来的字符编码标准是EBCDIC编码标准。EBCDIC,是Extended Binary Coded Decimal Interchange Code(即扩展二进制编码的十进制交换码)的缩写。

EBCDIC码是由国际商用机器公司(即IBM)为大型机操作系统而开发设计的,于1964年推出。

在EBCDIC码中,英文字母不是连续排列的,中间出现多次断续,这带来了一些困扰和麻烦。

因此,在后来IBM的个人计算机和工作站操作系统中并没有采用EBCDIC码,而是采用了晚于EBCDIC码推出、且后来成为了英文字符编码工业标准的ASCII编码方案。

 

2.

ASCII码(American Standard Code for Information Interchange美国信息交换标准码),由美国国家标准学会ANSI(American National Standard Institute)于1968年正式制定。

之后,ASCII编码标准又于1972年被ISO/IEC采用,制定为ISO/IEC 646标准(ISO,即国际标准化组织International Standardization Organization,成立于1946年;IEC,即国际电工技术委员会International Electrotechnical Commission,成立于1906年;ISO/IEC往往用来表示由这两大国际组织联合制定的标准)。因此,ISO/IEC 646(常简称为ISO 646)与ASCII指的是同一个编码标准。

由于ASCII码要晚于EBCDIC码出现(网上也有文章说是ASCII码要早于EBCDIC码开始设计,但1968年ASCII码才正式确定为标准),ASCII码的编码方式参照了EBCDIC码,并吸取了其经验教训,将英文字母进行了连续排列,这方便了程序处理。

3.

ASCII编码方案虽然不是最早出现的字符编码方案,但目前却是最基础、最重要、应用最广泛的字符编码方案。

目前所通行的其他字符编码方案,比如ISO-8859系列、GB系列(GB2312、GBK、GB18030、GB13000)、Big5、Unicode等等,均直接或间接兼容ASCII码。

而像EBCDIC这样与ASCII完全不兼容的编码方案,基本上处于已淘汰或将要淘汰的境地。

 

三、ASCII字符编码方案简介

1.

ASCII码使用七个二进制数字(即比特)来表示一个字符,总共表示128个字符(2^7 = 128,二进制编码为0000 0000 ~ 0111 1111,对应的十进制就是0~127)。

由于目前计算机普遍采用8位作为一个字节来进行存取与处理,因此剩下最高位的那1比特一般为0,但有时在一些通讯系统中也被用作奇偶校验位。

 

2.

ASCII字符集共计有128个字符(见上表),码点编号(即字符编号)从0到127(二进制为从0000 0000到0111 1111,十六进制为从0x00到0x7F),二进制最高位都是0。其中:

1)0~31:不可显示不可打印的控制字符或通讯专用字符,如0x07(BEL响铃)会让计算机发出哔的一声、0x00(NUL空,注意不是空格)通常用于指示字符串的结束、0x0D(CR回车)和0x0A(LF换行)用于指示打印机的打印针头退到行首(即回车)并移到下一行(即换行)等;

注:将这些用于控制或通讯的控制字符或通讯专用字符称之为“字符”,感觉上似乎有点怪,实际上这些所谓的“字符”表示的其实是一种动作或行为,因此才既不可显示也不可能打印。

2)32:可显示但不可打印的空格字符;

3)33~126:可显示可打印字符,其中48~57为0-9的阿拉伯数字,65~90为26个大写英文字母,97~122为26个小写英文字母,其余的是一些标点符号、运算符号等;

4)127:不可显示不可打印的控制字符DEL。

3.

这时候的字符编解码非常简单,比如若要将字符序列编码为二进制流写入存储设备,只需要将该字符序列里的各个字符在ASCII字符集中的字符编号(即码点编号),直接以一个二进制字节写入存储设备即可,字符编号就是字符编码,中间不需要经过特别的编码算法进行字符编号到字符编码的转换计算,更不存在所谓码元序列到字节序列的转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC配置没问题却却找不到页面,页面显示404

在Artifacts下此工程下新建一个lib文件夹,存放jar包,因为idea新建modules的时候不是直接创建的web项目: 选中lib点加号把jar导入进去,然后重启tomcat

【转】刨根究底字符编码之四——EASCII及ISO 8859字符编码方案

1. 计算机出现之后,首先逐渐从美国发展到了欧洲。由于欧洲很多国家所用到的字符中,除了基本的、美国也用的那128个ASCII字符之外,还有很多衍生的拉丁字母等字符。比如,在法语中,字母上方有注音符号;而欧洲…

tomcat乱码问题解决

tomcat安装目录下conf文件夹下的logging.properties文件,将java.util.logging.ConsoleHandler.encoding编码为GBK,如图:

【转】HMAC哈希消息认证码及算法原理

HMAC算法原理 HMAC算法是一种基于密钥的报文完整性的验证方法 ,其安全性是建立在Hash加密算法基础上的。它要求通信双方共享密钥、约定算法、对报文进行Hash运算,形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。 HMAC算法可以用来…

RestFul风格学习

传统的url是这样的 RestFul是这样的

【转】c#快捷键

CTRL SHIFT B生成解决方案 CTRL F7 生成编译 CTRL O 打开文件 CTRL SHIFT O打开项目 CTRL SHIFT C显示类视图窗口 F4 显示属性窗口 SHIFT F4显示项目属性窗口 CTRL SHIFT E显示资源视图 F12 转到定义 CTRL F12转到声明 CTRL ALT J对象浏览 CTRL ALT …

Angular使用Console.log()打印出来的数据没问题,点击详情后数据变了

我在一个界面添加数据使用updataEvent将对象返回给另一个界面后,在onUpData中处理时使用 this.xxxxx d,直接将地址值给了变量,当这个方法结束后d被重置了,所以this.xxx的值也消失了,这里要使用下面的方法复制一个对象出来。 this…

【转】刨根究底CSS(1):开篇

01 一道小菜 CSS很难,这应该是绝大多数Web开发人员的共识。 什么?你并不觉得很难?那我就先上一道小菜,请君品尝。 这是个乍一看,让人觉得很诡异的案例…… 算了,本来想滔滔不绝介绍一番,但一…

angular8 设置延时时间

延时执行this.setHiden()方法 setTimeout(() > {this.setHiden();},300);

【转】刨根究底CSS(2):CSS中的各种值——初始值,就是默认值吗?

先问个非常简单的问题,这个问题的答案,相信大部分Web开发人员都自认为显而易见,但却又多半会答错:CSS属性中的初始值(initial value),就是默认值(default value)吗? 难道不对吗?请往下看。 默…

sqlIte 多条件排序失效问题

写倒叙排序就直接按照mysql那样两个字段后面加一个desc,然后一直没有效果,改为如下: order by starttime desc,endtime desc;每个条件后都加desc就可以了,mysql应该是同样适用的,因为多个不同字段可以按照不同的排序方…

【转】刨根究底正则表达式(1):开篇

奇葩的正则表达式 1、常规学习过程很痛苦 计算机领域中有一些非常基础、重要以及应用广泛,但却又特别容易让人困惑、非常难以理解的主题,这包括了字符编码、字节序(即大小端表示)、浮点数实现、日期时间处理以及正则表达式等。 正则表达式目前市面上并…

正则表达式:匹配非0的整数和小数Double

要求可以是整数、小数,但是不能为0 下面正则0.0之类的也是匹配不中的 (后来测试发现出一个bug,竟然可以匹配到1 1,中间加个空格可以匹配中) ^(([1-9][0-9]*.{1}[0-9])|([0].{1}[1-9][0-9]*)|([1-9][0-9]*)|([0][.][0-9][1-9]))$所以又改了一…

【转】刨根究底正则表达式(2):文本查找方式的演化历史

上一篇文章讲到,从根源上来讲,正则表达式是为了解决文本的查找问题(也称为匹配问题)而诞生的。不过,文本查找方式的历史,要远早于正则表达式。 那么,在正则表达式出现之前,文本查找方式经历了什么演化过程…

正则表达式: input框禁止输入空格:不能只有空格、不能有空格、不能为空的判断

1.只有中间和最后能输入空格(如果让最后不能输入空格则把最后一个*改成),(如果想让开头可以输入空格则把改成*) ^[^\s][\s]*.*$2.不能输入空格 ^[^\s]*$3.如果也不能为空(我是用required来判断的),把*改成 (具体我没测试,感觉可以&#xff…

台式机电脑配置单_2020年电脑配置单重点硬件参考

,电脑的基本配件扫盲我前面写过很多,相信很多小伙伴都看过了,没有看过的可以上我专栏参观:电脑神棍局-组装机专栏​www.zhihu.com配置单在本文后面两篇,但是建议前面花两分钟看下。游戏篇后续还有工作和视频工作站篇主…

【转】刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK等)以及全角、半角、CJK

一、概述 1. 英文字母再加一些其他标点字符之类的也不会超过256个,用一个字节来表示一个字符就足够了(2^8 256)。但其他一些文字不止这么多字符,比如中文中的汉字就多达10多万个,一个字节只能表示256个字符,肯定是不够的&#…

正则表达式:匹配Double类型,整数和小数

正则表达式:匹配Double类型,整数和小数 ^(([0])|([1-9][0-9]*.{1}[0-9])|([0].{1}[1-9][0-9]*)|([1-9][0-9]*)|([0][.][0-9][1-9]))$

开机cpu风扇声音大_联想拯救者R720笔记本,开机显示暗屏,二修机多故障完美修复...

【机器型号】拯救者R720-15(7代I5)【主板版号】NM-B191【故障现象】笔记本不开机接同行送修笔记本拯救者R720-15,7代I5的机器,同行描述说不开机。【维修过程】 拿到机器按下开关没反映,三下五除二,扒下这台电脑的衣服,…

【转】刨根究底字符编码之六——简体汉字编码中区位码、国标码、机内码、外码、字形码的区别及关系

GB2312、GBK、GB18030等GB系列汉字编码方案的具体实现方式是怎样的?区位码是什么?国标码是什么?内码、外码、字形码又是什么意思?它们是如何转换的,又为什么要这样转换? 下面以GB2312为例来加以说明。 一、…