【转】刨根究底字符编码【2.0版】(3):字符编码的由来、演变与ASCII码

为什么需要字符编码

1.

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

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

2.

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

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

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

字符编码标准的演变

1.

字符编码标准实际上经历了如下三个阶段的演变过程:

① ASCII编码标准阶段 → ② ANSI编码标准阶段 → ③ Unicode/UCS编码标准阶段。

在第一个阶段的ASCII编码标准阶段,ASCII编码标准主要适用于美国(与美国同文的英国大致上也适用)。

后来计算机发展到欧洲各国以及世界各地,开始发展到了作为第二阶段的ANSI编码标准阶段,各个国家和地区先后各自制定了既兼容ASCII但又互不兼容的ANSI编码标准。

ANSI编码标准阶段的各自为政,为世界各个国家和地区基于计算机的信息交流带来了极大的不便,痛定思痛之余,终于通过Unicode/UCS编码标准的制定发展到了第三阶段,最终Unicode编码标准胜出。

EBCDIC码与ASCII码

1.

最开始设计出来的字符编码标准实际上并非ASCII编码标准,而是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。其中:

  • 0~31:不可显示不可打印的控制字符或通讯专用字符,如0x07(BEL响铃)会让计算机发出哔的一声、0x00(NUL空,注意不是空格)通常用于指示字符串的结束、0x0D(CR回车)和0x0A(LF换行)用于指示打印机的打印针头退到行首(即回车)并移到下一行(即换行)等;
注: 将这些用于控制或通讯的控制字符或通讯专用字符称之为“字符”,感觉上似乎有点怪,实际上这些所谓的“字符”表示的其实是一种动作或行为,因此才既不可显示也不可能打印。
  • 32:可显示但不可打印的空格字符;

 

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

 

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

3.

这时候的字符编解码非常简单,比如若要将字符序列编码为二进制流写入存储设备,只需要将该字符序列里的各个字符在ASCII字符集中的字符编号(即码点编号),直接以一个二进制字节写入存储设备即可。

此时,字符编号就是字符编码,中间不需要经过特别的编码算法进行字符编号到字符编码的转换计算,更不存在所谓码元序列到字节序列的转换。

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

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

相关文章

JS创建对象的模式介绍

转自http://www.cnblogs.com/asqq/archive/2013/02/01/3194993.html

ElasticSearch - JAVAAPI练习

索引 package com.chun.estest.demo;import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.http.HttpHost; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.action.delete.DeleteRequest; import or…

matplotlib的优点_超详细matplotlib基础介绍!!!

(给Python开发者加星标,提升Python技能)来源:逐梦erhttps://zhumenger.blog.csdn.net/article/details/106530281【导语】:出色的数据可视化,会让你的数据分析等工作锦上添花,让人印(升)象(职)深(加)刻(薪)。matplotli…

【转】WPF PRISM开发入门一( 初始化PRISM WPF程序)

这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识。目前最新的PRISM的版本是Prism 6.1.0,可以在Github上获取PRISM的源码。这个系列的博客将选择PRISM 4.1版本来讲解。可以从微软官网上下载到PRISM 4.1相关内容。将下载下来的文件解压开: …

JS 给某个对象添加专属方法

function A() {this.name "A"; } a new A(); a.func function() {alert(this.name); } a.func(); // func只有a对象能够使用。 function A() {this.name "A";this.func function(){ale…

截屏悬浮软件_功能强大,却小巧的录屏软件,不在错过你的王者时刻

看看录屏是一款操作简单。功能强大的录屏软件。他可以设置你录制视频的一个分辨率,帧率以及录制屏幕方向,非常方便,用户将手机摇一摇就可以控制开启和停止录屏,高效录制精彩瞬间,在录制游戏视频的时候也可以做到不掉帧…

【转】对ASP.NET程序员非常有用的85个工具

介绍 这篇文章列出了针对 ASP.NET 开发人员的有用工具。 工具 1. Visual Studio Visual Studio Productivity Power tool:Visual Studio 专业版(及以上)的扩展,具有丰富的功能,如快速查找,导航解决方案&am…

JAVA 捕获异常所遇BUG

排查程序BUG时发现,在线程池的定时器内并未进行异常捕获,而是在定时器外try catch的,内部实现中从HashMap中Get数据,没有此KEY所有返回了NULL,后面没对NULL做处理,导致程序出现异常,然后上层又没…

公司用的非标普通自动化用单片机还是plc_PLC的介绍

PLC又叫可编程控制器,一开始是替代传统接触器的一个东西。随着人工价格不断的上涨,自动化的设备会越来越普及。自动化不再是大企业才用的起的东西 ,各种多元化小型自动化设备进入了普通小企业甚至家庭作坊。PLC其实是单片机开发出来的一种工业…

【转】!C# 基础至集合-数组、List<T>、ArrayList、LinkedList、HashMap的一些区别

在C#中&#xff0c;数组由于是固定长度的&#xff0c;所以常常不能满足我们开发的需求。 由于这种限制不方便&#xff0c;所以出现了ArrayList。 ArrayList、List<T> ArrayList是可变长数组&#xff0c;你可以将任意多的数据Add到ArrayList里面。其内部维护的数组&…

JS字面量对象

<pre name"code" class"javascript">var A {name : "A",age : 18,sayNameAge : function(){ alert(A.name);alert(A.age);} }A.sayNameAge我搜到的资料上面都叫这种产生对象的方式叫 “对象字面量”&#xff0c;而我认为叫做 "字面量…

Hbase2修复 - HBCK2

第一次尝试修复HBase&#xff1a;https://blog.csdn.net/weixin_43736084/article/details/121336868 第二次尝试修复HBasehttps://blog.csdn.net/weixin_43736084/article/details/121336326

比较文本差异的工具_Linux 开发的五大必备工具 | Linux 中国

Linux 已经成为工作、娱乐和个人生活等多个领域的支柱&#xff0c;人们已经越来越离不开它。在 Linux 的帮助下&#xff0c;技术的变革速度超出了人们的想象&#xff0c;Linux 开发的速度也以指数规模增长。因此&#xff0c;越来越多的开发者也不断地加入开源和学习 Linux 开发…

【转】C# 动态对象(dynamic)的用法

说到正确用法&#xff0c;那么首先应该指出一个错误用法&#xff1a; 常有人会拿var这个关键字来和dynamic做比较。实际上&#xff0c;var和dynamic完全是两个概念&#xff0c;根本不应该放在一起做比较。var实际上是编译期抛给我们的“语法糖”&#xff0c;一旦被编译&#x…

关于prototype使用位置问题的讨论

问题贴&#xff1a;http://bbs.csdn.net/topics/390446362 new四部曲&#xff1a; &#xff08;1&#xff09;创建一个新的对象&#xff0c;并让函数的 this 指针指向它&#xff1b; &#xff08;2&#xff09;将函数的 prototype 对象的所有成员都赋给这个新对象&#xff0c…

第二次尝试修复Hbase2出现Region不一致,使用 HBCK2 - 2021.11.15

spark任务中入hbase任务全部失败了&#xff0c;查看日志发现hbase出现问题 报错日志&#xff1a; 在hbase的log中看到报错 Call queue is full on xxxx,16000,1611197476326, too many items queued 修改了配置文件&#xff0c;增加了队列数量 <property><name>h…

@query传参_vue-router中params传参和query传参的区别及处理方法

在 Vue 实例内部&#xff0c;你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push想要导航到不同的 URL&#xff0c;则使用 router.push 方法。这个方法会向 history 栈添加一个新的记录&#xff0c;所以&#xff0c;当用户点击浏览器后退按钮时&#xff0c;则…

JS成员函数声明位置优化

上代码 function A() {this.a function(){}; } a1 new A(); a2 new A(); alert( a1.aa2.a);输出 说明了a1.a&#xff0c;a2.a指向的内存不是同一个&#xff0c;也就是每个对象都有一份自己的函数&#xff0c;只不过一个类的所有实例之间的函数长得是一样的&#xff01; 所以…

【转】什么是用例

用例是什么? 其原始英文是usecase&#xff0c;直译过来就成了用例。这也是一个比较贴切的叫法了。 从字面的直接理解就是使用的例子。 另一种比较流行的定义是用例就是与使用者(actor)交互的&#xff0c;并且给使用者提供可观测的有意义的结果的一系列活动的集合。 这个定义…