龙空技术网

文字在计算机中是如何存储的,如何用二进制表示字母和符号?

晓览YMPA 37

前言:

现时看官们对“图片二进制格式是什么”大约比较关心,姐妹们都需要学习一些“图片二进制格式是什么”的相关文章。那么小编在网摘上收集了一些关于“图片二进制格式是什么””的相关内容,希望姐妹们能喜欢,同学们快快来学习一下吧!

我是Windows和Mac双持用户,两个系统上的文本编辑器我用的都不是自带的。Windows上我用的是EmEditor,Mac上我用的是Sublime Text。在使用软件的过程中我发现了一个问题,就是如果我用Windows的EmEditor编辑一篇txt文本,再到Mac上读取这个文本会出现乱码,显然是读取文件的过程中出现了问题。

大家在使用电脑或手机的时候应该或多或少都见过乱码现象,这通常是因为文本编码方式的不同。要想知道乱码产生的原因以及各种文本编码方式的区别,就要首先弄清楚一个问题,就是文字在计算机中是如何表示的。

在讲这个问题之前我想先简单介绍一下通信的历史。在古代如果想进行远距离通信有这样几种方式:烽火台、飞鸽传书、驿送等。但是它们都有很多缺点,比如传输的距离有限,传递的信息少,对方收到消息需要很长时间,甚至你都不能确定对方是否收到了消息。

到了近代随着电和磁的发现通信技术有了突破,而电报就是近代通信方式的开端。我们经常会在一些谍战剧中看到使用电报发送情报的情节,鲨鱼和迟龙章进攻的情报已经发出,发出的滴滴答答的声音就是在传送信息。文字肯定是不方便直接传输的,所以在发送消息之前要先把文字"翻译"成适合的格式。

其中最主流的是摩尔斯电码,它是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。我们这个视频只讲怎么用电码表示字符,而信号传输的原理涉及到电磁学的相关知识,大家可以自己找相关资料学习。

这里是26个英文字母和10个数字的摩尔斯电码,我们来看它的规则。一个圆点叫做一点占据一个时间单位,一条横线叫做一划占据三个时间单位,一个字母内部的空隙也是占据一个时间单位。两个字母之间的空隙占据三个时间单位,两个单词之间的空隙占据七个时间单位。可以用一个方格表示一个时间单位,这样看着更明显一些。

可以看到每个字母或数字占的时间长度都是不一样的。字母E的时间最短只占用了1个时间单位,而数字0的时间最长需要占用19个时间单位。为了方便,把点和划在小方格中涂黑空隙留白,这样黑色的方格就表示按下发报机的手柄,白色的方格就表示松开发报机的手柄。

比如要发送一句"ARE YOU OK",就用到了这几个字母,然后给单词内每个字母间填上三个单位的空隙,给每个单词之间填上七个单位的空隙,一共用了93个时间单位,就可以完整表示ARE YOU OK这句话了。

可以看到虽然发送的电码只有黑白两种状态,但是它却能够表示任意的字母和数字。当接收端接收到电码之后,再根据同样的规则翻译出来就可以了。

计算机中存储文件的原理也是类似的,硬盘是由一个一个的存储单元组成的。把每一个存储单元看作是一个方格,它就像一个开关,有开和关两种状态,类似电码里黑白两种状态。

为了方便表示,用数字0和1来表示两种状态,每一个方格叫做1个比特,8个比特可以组成1个字节,1024个字节可以组成1KB(千字节),而1024KB=1MB(百万字节),1024MB=1GB(十亿字节)。

所以如果有一块1TB的硬盘,里面就有大约8.8万亿个比特,这么大的容量可以存足够多的视频、音乐、图片、文本等文件了。但是如果想让这些文件存储到计算机中,还是要像发电报一样,要把它转换成0和1,也就是二进制的形式,每种文件类型都有它自己的转换方式。

接下来就来看看纯文本,也就是txt格式的文件是如何转换为二进制格式的。如果只用一个比特来表示字符,那么显然最多只能表示两种字符,因为一个比特只有0和1两种状态。而如果用两个比特来表示字符,那么就有00、01、10、11四种状态,最多可以表示4种字符。依次类推,3个比特可以表示8种字符,4个比特就可以表示16种字符。

所以得到规律,如果一个字符用n个比特来表示,那么它最多可以表示2^n种字符。因为一个字节有8个二进制的数字,写起来会比较长,所以通常会把每4位二进制数字写成一位16进制数字的形式。这16组二进制数字正好对应十六进制的0-F,这样就可以用两位十六进制的数字表示一个字节。

比如要表示这样的16比特,也就是2个字节的数据,就可以简单地写成十六进制的A52D。为了避免与十进制混淆,通常在前面加一个0x的前缀。计算机诞生之初,对于英语来说,只要能显示52个大小写字母和几十个符号就足够使用了。

所以在1963年,美国发布了ASCII码标准,它正是由电报码发展而来的,一共定义了128个字符,也就是2的7次方,一共用到了7个比特。但因为在计算机中通常是以字节为单位存储数据的,所以每一个ASCII字符实际占用的是一个字节,只是这些字符只用到了这一个字节的后期位,最高位始终是0。

这128个字符中可显示字符一共是95个图标所示,另外33个则是控制字符,这些控制字符的大多数都已经废除了,所以我没有在表中列出,大家只关注可显示字符即可。比如数字123分别对应16进制的3、1、3、2、3,大写字母ABC分别对应16进制的4、1、4、2、4、3,at符号对应16进制的40。

可以在EmEditor软件中把光标放到每个字符的前面,在状态栏中就会显示它的十六进制编码。EmEditor是一个功能非常强大的文本编辑器,在后续的视频中也会介绍一下这款软件。

大家有没有注意到ASCII编码和摩尔斯电码的区别?如果用摩尔斯电码表示字符,每个字符对应的摩尔斯电码的长度是不一样的,这样就必须在每个字符对应的电码之间插入三个空隙才能区分每个字符。而在ASCII码中,每个字符都是固定长度,就是1个字节,所以并不需要在每个字符之间插入空隙。计算机只需要按照1个字节的固定长度读取数据,就可以正确还原出每个字符了,这样就节省了存储空间。

英语用这128个编码就够了,但如果用来表示其他语言可能就不够了,比如法语和德语就有这样几个字母。所以欧洲的国家对ASCII编码进行了"改造",用上了闲置的最高位,最多就可以表示256个字符了。

对于汉字来说,常用字就有几千个,256个字符远远满足不了要求,所以需要制定另外的标准来为汉字来编码。一个汉字通常需要两个字节来表示,可以看到"晓览"两个字都分别对应了两个字节的编码。

如果这个视频对你有帮助,那么就请点一个免费的赞,有任何问题也可以在评论区交流或者私信我。下个视频来介绍汉字的编码标准以及出现乱码的原因。记得点赞关注喔!

标签: #图片二进制格式是什么