深入理解:文件、二进制、字符集又称编码,三者之间的区别与联系

  • 一·为什么计算机底层要使用二进制存储数据?
  • 二·如何使用二进制来表示世界上的各种信息与符号?
  • 三·那二进制又与文件、字符集之间有什么关系呢?
  • 四·计算机底层是如何传输数据的?
  • 五·计算机底层是如何传输数据,详细介绍可以参考下文链接:

一·为什么计算机底层要使用二进制存储数据?

计算机采用二进制的主要原因:
1、计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示,
现在已经演变为了高低电平来控制是否连通电路了,0:低电平,1:高电平;也可以用true和false两种状态来表示,
所以C语言中0可以表示false,非0则可以表示true状态。
(如果逻辑电路能有第三种状态,也许就可以实现三进制存储数据了)2、二进制中只使用0和1两个数字,传输和处理时不易出错,因而可以保障计算机具有很高的可靠性。

二·如何使用二进制来表示世界上的各种信息与符号?

1.在解答这个问题之前,先来发现一组规律:
(1)一位二进制数排列组合,可以有两种状态:0或者1。总计:2的1次方=2
(2)二位二进制数排列组合,可以有四种状态:00、01、10、11。总计:2的2次方=4
(3)三位二进制数排列组合,可以有八种状态:000、001、010、011、100、101、110、111。总计:2的3次方=8
......
综上所述:n位二进制排列组合,总共就可以表示2的n次方种排列组合状态!2.如果我们就用8位二进制数排列组合的一种状态,来映射一个物理世界的信息或者符号。例如:物理世界的数字0:计算机底层用 00000000 来表示;物理世界的数字1:计算机底层用 00000001 来表示;物理世界的数字2:计算机底层用 00000010 来表示;......这样表示下去就形成了一套字符集,这个字符集就是人类语言与计算机之间沟通的中间转换标准与规范。如果全世界人们都遵守这套规则,
那么计算机底层存储的二进制数据,在全世界都可以被正确的识别出来。
(ASCII表就是这样构造出来的,其他编码字符集也是根据这样的思维映射构造的,只是细节上有所区别!)注意:字符集实质上就是一种人类自然语言与计算机存储的数据之间,互相转换的约定关系!3.为什么现在普遍使用8、16位二进制组合来表示一个字符信息,而不是7位,30位等二进制组合来表示?因为现在世界上已知的各种文字、语言、符号、标识等加起来总数,已经超过了2的15次方最大排列组合状态,但是未超过2的16次方最大排列组合状态。
因此低于16位的二进制组合无法全部表示世界上所有的信息与符号,而超过16位的二进制组合没有必要。
因为一位二进制数,在计算机底层就会控制一个逻辑电路运算一次,如果表示物理世界的一个信息符号所需二进制位数越多,
则底层所需控制逻辑电路运算的次数则越多,这样就会造成极大的资源浪费。而之所以开发中经常使用8位二进制编码则是因为8位二进制就完全足以供英文国家(准确说是拉丁语言国家)的人员开发使用,
开发中基本上都是英文命名,或者汉语拼音等等,基本上不会允许使用汉字或者其他特殊文字命名。
这样一来似乎也就没有必要使用16进制进行软件开发了;
然后互联网网站这些地方就得使用了,因为网站这些地方有时候需要兼容世界各个国家的语言文字符号;
而且16进制的Unicode万国码,现在也基本上都是作为各种字符集之间互相转换的基石,比如GBK转UTF-8,就得其中一方先转换为Unicode再转换为其他字符集。4.这里面还有一个有趣的故事:为什么Unicode编码会兼容美国ASCII码?

三·那二进制又与文件、字符集之间有什么关系呢?

1.结合上文所述,可以通过8位二进制数的排列组合,表示物理世界的一个个信息符号。2.文件是由一个个物理世界信息符合组合而成的。文件的底层自然也是利用二进制数据来存储的。再底层就是由很多逻辑电路组合在一起构成了文件。3.每个文件从创建开始,就必须存在某种字符集编码与之对应;此后输入的内容都会按照这种编码格式,将人类世界的信息符号,一一转换为二进制数据进行存储。
(一般创建文件时,系统都会默认使用某种编码,例如创建txt文本,一般默认使用UTF-8编码)
(此处的文件包括一切计算机能存储的文件,并不仅仅是文本文件。例如:图片、音乐、视频、文本、目录、等等)4.一个文件创建时利用了什么字符集进行编码,那么这个文件一般情况下都只能使用什么字符集进行解码查看。否则就会出现乱码。
(特殊情况:a字符集被b字符集所包含。例如:Unicode编码兼容ASCII码表,也就是说利用ASCII编码创建的文件,可以使用Unicode编码解析打开。但是反过来就未必了!!!)5.此时可以顺便解答一个疑问,那就是有后缀名的文件与无后缀名的文件,两者之间有什么区别?
一·相同点:(1)从底层存储来说,没什么区别,都是二进制数据存储。(2)从字符集来说,若两个文件内容类型一样时(例如:都是文本文件,都是音频文件等等),创建有后缀名的文件与创建无后缀名的文件,
它们都会默认使用相同的字符集进行编码存储在计算机底层。并不会有什么不同之处(两者都不特殊指定字符集编码)(3)两者都可以使用相同的编辑器,且利用相同的字符集解析文件,而不会出现乱码(4)两者在专业人士看来,并无什么不同,例如:程序员经常需要将一个对象数据写入到一个缓存文件,再将缓存文件发送给前后端使用,
而这个缓存文件一般都是32位UUID随机数的无后缀名文件。
二·不同点:(5)文件有后缀名可以帮助人们快速识别文件内容是什么类型的,从而快速找到解析该文件的工具和编码方法。6.综上所述:
(1)二进制是文件底层存储的基础,而文件是一大块二进制数据的集合。
(2)但是一旦你打开这个文件,操作系统会自动根据默认字符集进行文件解析并展示到屏幕上。一旦使用的字符集对应不上,就会出现乱码。
(3)编码(字符集)就是二进制数据与物理世界信息符号两者互相转换解析的桥梁。7.文件的编码字符集是可以更改的,并不是固定不变的。
(1)例如:文件原本使用的是ASCII码字符集创建的,通过notepad++工具,就可以将文件从ASCII字符集转换为UTF-8字符集。转换都需要通过万国码Unicode进行中间桥梁置换。
转换之后,就需要使用utf-8字符集去解析该文件了,若再使用ASCII字符集去解析就会出现乱码。

四·计算机底层是如何传输数据的?

简单概述:
(1)发送:网卡会负责把计算机上01代码也就是二进制数字信号转换成模拟信号,也就是电信号,比如把0用低电平表示,1用高电平表示,通过网线传输到另一台的电脑网卡上。(2)接收:而另一台的电脑网卡则负责反向操作,把网线传输过来的模拟信号,转换为数字信号,然后反馈给显示器,用户就看到了各种不同的画面和文字了。传输数据的大体思路就是这样的,实际传输肯定非常复杂,例如什么加密解密,编码转换等等。

五·计算机底层是如何传输数据,详细介绍可以参考下文链接:

为什么计算机可以上网?计算机是如何传输数据的?

深入理解:文件、二进制、字符集(编码)三者之间的区别与联系相关推荐

  1. 【学习日志】2022.09.02 (C++)strcmp和stricmp、strcmpi三者之间的区别、C语言判断文件后缀名、ZENO Audio Update、TEN MINUTES PHYSICS

    (C++)strcmp和stricmp.strcmpi三者之间的区别 (strcmpi在Windows C标准库实现,但不在GNU C标准库实现) #include <string.h> ...

  2. keydown,keypress,keyup三者之间的区别:

    最近看了Javascript高级教程中对过滤输入的介绍,想实现比如电话号码中不能包好非数值的字符,而相应文本中插入字符的操作是keypress事件,所以就想通过阻止这个事件的默认事件行为来阻止这个事件 ...

  3. 磁带机、磁带库和磁盘阵列三者之间的区别

    磁带机.磁带库和磁盘阵列三者之间的区别 磁带机 磁带机(Tape Drive)一般指单驱动器产品,通常由磁带驱动器和磁带构成,是一种经济.可靠.容量大.速度快的备份设备.这种产品采用高纠错能力编码技术 ...

  4. [转]ExtJs基础--Html DOM、Ext Element及Component三者之间的区别

    要学习及应用好Ext框架,必须需要理解Html DOM.Ext Element及Component三者之间的区别. 每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM ...

  5. TCP三次握手、四次挥手、socket,tcp,http三者之间的区别和原理

    接着上一篇文章叙述: TCP/IP连接(在互联网的通信中,永远是客户端主动连接到服务端): 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协 ...

  6. 始卡尔曼滤波算法(KF)、扩展卡尔曼滤波算法(EKF)以及无迹卡尔曼滤波算法(UKF)三者之间的区别?

    原始卡尔曼滤波算法(KF).扩展卡尔曼滤波算法(EKF)以及无迹卡尔曼滤波算法(UKF)三者之间的区别? 原文:https://www.zhihu.com/question/22714163/answ ...

  7. 你知道URL、URI和URN三者之间的区别吗?

    这是一个经典的技术争论,许多人都会自问:URL.URI,很可能还有URN,它们之间的区别是什么.虽然,现在我们简单地把 URN 和 URL 都看做 URI,但严格来说URI可以进一步划分为URL.UR ...

  8. String String.valueof() toString三者之间的区别~

    String  String.valueof()  toString三者之间的区别~ (String )强制类型转换,使用这种方法时,需要注意的是类型必须能转成String类型.因此最好用instan ...

  9. String StringBuilder StringBuffer三者之间的区别~~~

    String StringBuilder  StringBuffer三者之间的区别~~~ String是字符串常量,它是典型的immutable类,被声明final class,所有的属性都是fina ...

最新文章

  1. 胜过iPhone XS?Google Pixel的“夜视功能”是怎样炼成的
  2. 拯救莫莉斯[GDOI2014]
  3. 使用ueditor实现多图片上传案例——Dao层(BaseDao)
  4. Perl的浅拷贝和深度拷贝
  5. 如何关闭window10自动更新
  6. 不用归一化,深度学习模型也可以很优秀!
  7. oracle11g关闭库,Oracle11g中SYS连接阻止关闭数据库
  8. 指向结构体变量的指针变量
  9. Android虚拟机Dalvik介绍
  10. Jarslink Demo Alibaba(教程 源码)
  11. ubuntu 下WebStorm 无法输入中文
  12. 华为数通考试正式改版,改版前后有什么区别?
  13. 北航计算机组成原理课程设计-2021秋 PreProject-MIPS-MIPS 汇编程序设计
  14. excel中用正则匹配_Excel 使用正则表达式提取数据
  15. 最大连通分支Giant Component
  16. Windows7下IPV6设置方法详解
  17. dispatch js实现_dva.js(and design)实现dispatch的回调函数
  18. iOS_6_ToolBar+xib+红楼梦
  19. 小米路由器同一wifi局域网下,各主机无法ping连
  20. 江苏大学的计算机,毛启容-江苏大学计算机科学与通信工程学院

热门文章

  1. 渣渣三本毕业,工作两年,月薪18k,我是如何做到的?
  2. 根据端口划分虚拟局域、集线器、中继器、交换机、路由器、网桥----计算机网络
  3. 哪些高校的计算机专业最牛,终于有了定论!教育部“双一流”高校及学科名单公布
  4. position(五种属性,以及每个属性的特点)
  5. 复制+粘贴->集群就绪 | 微软视角hpc4you_toolkit使用演示
  6. img标签src引用网络图片,页面不显示,返回403错误,网络图片地址在浏览器能加载,放html却不能显示
  7. 计算机音乐谱大全往后余生,往后余生简谱-马良-往后余生,有你有我
  8. 米4用linux刷机救转,小米4C变砖了怎么办 小米4C刷机救砖教程
  9. 用什么项目管理软件科学统筹“双11”
  10. CSS 背景-CSS background