计算机编码发展历史和编码方式

2023-10-27

编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码简称编码。
用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。
编码在电子计算机、电视、遥控和通讯等方面广泛使用。
解码,是编码的逆过程。

为什么出现多种编码?

相信计算机专业的都知道,所有的数据(文本,音频,视频等等)在计算机内部都是以二进制形式来表示的。而计算机内部为什么采用二进制则是由硬件决定的(计算机采用了具有两种稳定状态的二值电路)。这样,就引出一个问题:
我们人类不适合直接看二进制。
因此,需要用一种方法,将二进制转为我们能看懂的东西。编码就应运而生了。

编码发展历史

第一阶段:
在计算机中,所有的数据只可能是0或者1(用高电平和低电平分别表示1和0),那么我们通常看到的字符也就只能用0和1来表示。于是科学家们(这里指的是美国的科学家)就想出一个办法,把一个特定的数字对应一个特定的字母进行存储和传输,比如我需要存储字母a,那么我存入一个数字97(即在计算机中存入二进制(01100001),这个过程叫做编码(encode),而我们在读取数据的时候,当遇到97时,我们就让计算机显示字母a,这个过程叫做解码(decode)。
这里你应该知道:

  • 计算机看懂的东西我们看不懂,我们看懂的东西,计算机看不懂。

把计算机看懂的东西(二进制(01100001))变成我们看懂的东西(数字97,也就是a),这个过程叫解码(decode)
把我们看懂的东西(数字97,也就是a)变成计算机看懂的东西(二进制(01100001)),这个过程叫做编码(encode)
为了大家在数据传输的时候不至于产生误会,那么我们需要让所有的人都使用数字97来代表字母a,所以需要制定一份标准(即码表),最开始的这个标准叫做ASCII码表。
ASCII码的实现方式:
最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255)。
由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里(即用一个字节的后七位),也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。

第二阶段:
随着发展,计算机开始普及,当计算机流传到欧洲时,问题再次出现,原本的ASCII编码只能解决美国人的编码问题,无法将欧洲的文字表示出来。于是乎,欧洲人就把ASCII码中没用到的第一位给用了,即:

  1. ASCII码用一个字节的后七位,表示范围是0-127;
  2. 欧洲人把这个字节的第一位也用了,表示范围0-255。除去原本的0-127,剩下128-255:128-159之间为控制字符,160-255位文字符号,其中包括了西欧语言、希腊语、泰语、阿拉伯语、希伯来语。砖家们决定把他们的编码名称叫做Latin1,后面由于欧洲统一制定ISO标准,所以又有了一个ISO的名称,即ISO-8859-1。

第三阶段:
计算机技术当然也传到了亚洲大地,比如中国。原本的一个字节的8个位全都用完了,但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。
问题又来了:

  • 你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
到了这里:已经知道的编码方式主要有两种:ASCIIUnicode
现在,捋(lǚ)一捋ASCII编码和Unicode编码的区别:

  1. ASCII编码是1个字节,而Unicode编码通常是2个字节。(如果要用到非常偏僻的字符,就需要4个字节)
  2. 字母A用ASCII编码是十进制的65,二进制的01000001;
  3. 字符'0'用ASCII编码是十进制的48,二进制的00110000,注意字符'0'和整数0是不同的;
  4. 汉字中已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101。

你可以猜测,如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001。
新的问题又出现了:

  • 如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。
UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101

从上面的表格还可以发现,UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

ASCII,Unicode,utf-8之间的关系

看完上面的东西,可能有点乱,我这里简单总结一下ASCII,Unicode,utf-8之间的关系:

  • ASCII是计算机刚刚起步的时候用得编码方式,特点是可以表示的字符特别少,但简单易用。
  • Unicode是随着计算机发展,ASCII已经无法表示世界各国这么多文字而出现的一个新的编码方式,优点是编码快速,缺点是占用内存大。(如果你的文本全都是英语,如果用Unicode时,每个字符占用两个字节。而用ASCII每个字符只占用一个字节);
  • 为了解决Unicode的内存占用大问题,出现了utf-8,utf-8可以根据字符的类型,自动选择最优编码。但缺点是编码速度慢。

所以有了令人容易搞混的问题出现:

  • 什么时候用utf-8(这里utf-8已经包括ASCII,ASCII编码实际上可以被看成是UTF-8编码的一部分)编码方式?什么时候用Unicode编码方式?

什么时候用utf-8编码?
答案很显然:对内存消耗要求高的,对速度要求不高的场景下用utf-8。(注意:这里的速度是指cpu运算速度)
那你就想啊,什么时候对内存消耗要求高?很容易地就想到当我们要保存在硬盘的时候肯定是想占用空间越少越好啊,当我们在网络上传输肯定也想占用空间越少越好啊,所以,当我们的数据保存在硬盘的时候,当我们数据要在网络传输的时候,用得就是utf-8编码。

什么时候用Unicode?
答案显然:对速度要求特别高的,相对之下占用空间大小可以稍微妥协的场景下用Unicode编码。
我们知道,数据想被处理,首先得加载都内存上,这样,cpu才能以非常惊人的速度再内存上获取要处理的数据。这样,我们就轻易知道,当数据被加载到内存上时,在内存中的编码方式是Unicode。
我们来个总结:
1.我们平时电脑磁盘中的一个文件(abc.txt)其实是以utf-8编码方式存储的,当我们打开这个文件时,这个文件在加载到内存的时候会转变为Unicode编码方式。

2.浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器(所以你看到很多网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。):

web-utf-8

参考:https://www.cnblogs.com/busui/p/9340339.html

下篇文件主要介绍一下python3 中的编码和解码相关内容

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机编码发展历史和编码方式 的相关文章

  • ANSI是个啥???

    来自 https blog csdn net imxiangzi article details 77370160 http www cnblogs com malecrab p 5300486 html 用Notepad 创建一个文本文件
  • java “错误:编码GBK 的不可映射字符”解决方法

    本人用sublime text编写了java代码 通过DOS 编译 提示 错误 编码GBK的不可映射字符 如下图 解决方法有以下两种 1 运行时使用 javac encoding UTF 8 Convert java 2 记事本打开java
  • 如何最高效实现手机~电脑端文件传输?

    平常使用电脑办公的时候 经常会有把手机上的文件传到电脑或把电脑上的文件分发给局域网 内网 的各个伙伴的情况 通常我们会选择使用QQ或微信的文件传输功能来实现 但是当文件比较大 比较多时 就无法发送了 再者每次通过文件助手来发送文件时 其本质
  • 计算机单位及单位转换

    计算机单位及转换 一 位 计算机中表示信息的最小单位 表示一位二进制信息 以b表示 bit 0 1 一个字节8位 字节 计算机中处理信息的最小单位 以八位二进制信息 以B表示 1B 8b 一个整数4个字节 字长 一个字所包含二进制输的位数
  • 机器数的原码、反码、补码、移码表示以及浮点数的二进制表示

    初学计算机组成原理时 有点儿搞不清楚机器数的各种表示方法 今天在这里总结一下 希望对大家有帮助 首先明确两个概念 机器数是指将 和 数字化的数 其中用 0 表示 1 表示 而对应的有 和 的数则称为真值 机器数的表示方法 1 原码表示法 符
  • ISO/OSI七层模型

    想要让两台PC进行通信 必须使用相同的信息交换规则 我们把计算机网络中用于规定信息的格式 以及如何发送和接受信息的一套规则称谓网络协议或者通信协议 我们为了减少网络设计的复杂 人们按功能将计算机网络划分为多个不同功能的层 网络体系结构就是网
  • Python 处理GBK编码转UTF-8读写乱码问题

    今日写了个爬虫 爬取前程无忧的招聘信息 老套路 首先获取网页源代码 coding utf 8 import requests url http search 51job com jobsearch search result php pag
  • Linux系统启动分析

    文章目录 大体流程分析 一 BIOS 1 1 BIOS简介 1 2 POST 二 BootLoader GRUB 2 1 What s MBR 2 2 What s GRUB 2 3 boot img 2 4 core img lzma d
  • 计算机组成原理笔记

    文章目录 一 计算机的基本组成 二 总线 2 1 总线控制 三 主存储器 3 1 RAM 3 2 存储器与CPU相连 3 3 存储器校验 3 4 提高存储器访问速度 3 5 cache 四 输入输出系统 4 1 I O接口 4 2 程序中断
  • 汇编语言 第3版 王爽 检测点答案及详细解析

    第一章 基础知识 检测点1 1 1 1个CPU的寻址能力为8KB 那么它的地址总线的宽度为 13位 2 1KB的存储器有 1024 个存储单元 存储单元的编号从 0 到 1023 3 1KB的存储器可以存储 8192 2 13 个bit 1
  • ##顺序表 编码##

    ifndef LIST H define LIST H class List public List int size List 析构函数 void ClearList 清空线性表 bool ListEmpty 判断线性表是否为空 int
  • Windows记事本编码反汇编分析

    转载自 liam page 网上有一个流传多年的段子 这个段子大致是说 若你在简体中文版本的 Windows 系统下 用系统自带的记事本程序 以默认的 ANSI 编码保存 联通 两个字 那么重新打开后 联通 二字就消失了 如果我没记错的话
  • uthash

    在软件开发中 不可不免的会使用到hash表 hash表的优点这里就不说了 以下介绍一个hash表的C实现 uthash是用宏实现的 使用的时候非常方便 只用包含uthash h即可 Uthash的三个数据结构 1 typedef struc
  • 计算机网络笔记(二)

    计算机网络体系结构 OSI参考模型 数据封装 增加控制信息 构造协议数据单元 PDU 控制信息主要包括 地址 Address 标识发送端 接收端 差错检测编码 Error detecting code 用于差错检测或纠正 协议控制 Prot
  • Console.WriteLine打印中文为何出乱码?

    因为你当前环境代码页是437 是美国英语的字符编码 你把你环境设置成936就是简体中文字符编码环境了 你当前的是这个 Console OutputEncoding Encoding GetEncoding 437 设置成这样就支持中文编码了
  • 按指定条件从C++11 map中删除元素

    问题 无法使用remove if配合map容器的erase操作按指定条件从map容器删除元素 C 11 解决方案 可以使用一下函数实现这个需求 template
  • 进程和线程的详解和区别

    1 进程和线程概述 我们都知道计算机的核心是CPU 它承担了所有的计算任务 而操作系统是计算机的管理者 它负责任务的调度 资源的分配和管理 统领整个计算机硬件 应用程序是具有某种功能的程序 程序是运行于操作系统之上的 2 进程 我们编写的代
  • 通过wireshark抓取telnet登陆密码

    笔者学校有一台设备 ip地址是 192 168 84 10 先打开wireshark捕获无线网卡 使用telnet登陆如图所示 按下回车 笔者这里输入的密码是 A603 现在回到wireshark停止抓包 并且在filter处输入如下的过滤
  • Java基础之随机生成数字和字母

    原文地址 http blog csdn net yaodong y article details 8115250 字母与数字的ASCII码 目 前计算机中用得最广泛的 字符集及其编码 是由美国国家标准局 ANSI 制定的ASCII码 Am
  • 计算机基础:网络基础

    一 网线制作 1 制作所需要工具 网线 网线制作标准 2 水晶头使用 3 网线钳使用 4 视频教学 网线制作 二 集线器 交换机介绍 1 OSI七层模型 Open System Interconnect 即开放系统互连参考模型 是由 ISO

随机推荐

  • Android开发中的单位换算

    dp density independent pixels dip device independent pixels 都是指抽象像素 用来适配不同屏幕 sp scale independent pixels 是安卓字体单位 ppi pix
  • lv5 嵌入式开发-1 进程的创建和回收

    目录 1 进程概念 2 进程内容 3 进程类型 4 进程状态 5 查看进程信息 5 1 相关命令ps top proc 5 2 相关命令 nice renice 5 3 相关命令job bg fg 6 子进程概念 7 子进程创建 fork
  • 终于等到你,强大的百度云AI智能小助手可以预约申请内测了……!

    今天打开百度网盘 直接看到一个这么可爱的 云一朵 原来是百度智能小助手来了 或者你也可能会在右上角看到 云一朵 的图标 于是我赶紧申请预约 申请页面有功能演示 咱们可以看到 这个智能小助手工具非常强大 你可以对 云一朵 说 帮我找一下去年聚
  • 华擎服务器主板 稳定性,【华擎X570 Steel Legend主板使用总结】设置

    华擎X570 Steel Legend主板使用总结 设置 性能 华擎主板的BIOS设置与华硕主板有较大的不同 华擎X570 Steel Legend主板BIOS中所有的超频选项都集中在 超频工具 子菜单中 如果想超频的话 可以把 Volta
  • 优化Webpack打包流程:打包完成后再删除旧文件,确保网站访问稳定

    前言 想法源于某个基于 vue cli 的实际项目的部署方式是在服务器拉取最新代码 在服务器本地打包 三种打包对比 webpack 本身并不会自动删除旧的打包文件 vue cli 在打包前会直接清空输出目录 vite 打包过程不会直接删除输
  • 平衡二叉树的删除

    平衡二叉树的删除 平衡二叉树的删除 平衡二叉树删除节点的三种情况 删除叶子节点 被删的结点只有左子树或只有右子树 被删的结点既有左子树又有右子树 网上关于平衡二叉树的删除操作 实在太少了 找到了一遍好文章 特转载到CSDN 当做笔记 平衡二
  • 二叉树的前、中、后、层次非递归遍历(js)

    有如下二叉树 遍历 前序遍历 head left right function HLR tree const stack res if tree stack push tree while stack length const cur st
  • 多媒体笔记第二章

    第2章 数字声音及MIDI简介 知识点 一 声音的几个概念 1 声音的强弱 声波压力大小 2 音调的高低 声音频率 3 声音的信号 复合信号 分量信号 二 两个参数 频率和幅度 1 人能够听到的是20 20 000Hz 0 120dB 2
  • Expected isFloatingType(grads[i].type().scalarType()) to be true, but got false.

    错误原因 在进行 张量 梯度求解时 传入数据类型不对 解决方法 指定传入张量类型为 float 类型即可 错误代码示例 import torch 第一步 创建 tensor x torch ones 2 2 requires grad Tr
  • latex学习笔记——latex的字体字号设置

    字体属性 一 字体编码 正文字体编码 OT1 T1 EU1等 数学字体编码 OML OMS OMX等 二 字体族 罗马字体 笔画起始处有装饰 无衬线字体 笔画起始处无装饰 打字机字体 每个字符宽度相同 又称等宽字体 三 字体体系 粗细 宽度
  • 【读书笔记】好好学习-个人知识管理精进指南

    文章目录 引言 什么是知识 第一章 知识管理与认知优势 在海量信息即时获取时代 我们拼什么 如何提升认知深度 为什么大多数人的学习层次上不去 到底哪些知识值得学 第二章 掌握临界知识的底层思维与方法 跳出 低水平勤奋陷阱 学习临界知识需要具
  • Win32 Application 、Win32 Console Application、MFC工程项目

    Win32 Application和Win32 Console Application 都是工作在32位Windows环境的程序 Win32 Application 是标准 windows程序 完全拥有windows的特性 也即我们常说的窗
  • 基于cnn-lstm的交通流量预测

    目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的结构 CNN LSTM结构 卷积神经网络CNN LSTM交通流量预测 基本结构 主要参数 MATALB代码 结果图 展望 背影 现在生活 为节能减排 减少电
  • ubuntu 18.04 中 eBPF samples/bpf 编译

    1 history 信息 一次成功编译 bpf 后执行 history 得到的信息 yingzhi yingzhi Host ex ex kernel linux 5 4 history 1 ls 2 mkdir ex 3 cd ex 4
  • "wordcloud2"

    OUTLINE 相关的可以生成词云的途径 wordcloud2 相关的可以生成词云的途径 wordle 介绍 从文本生成词云图 网址 http www wordle net 优点 及时调用 缺点 电脑需已安装Java 对中文不友好 成图 w
  • Proxy(代理) ARP作用及原理

    概述 代理ARP是ARP协议的一个变种 对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信 网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答 代理ARP就是将一个主机作为对另一个主
  • 解决uniapp的checkBox取消选中

  • 递归函数详解

    文章目录 1 什么是递归函数 2 递归求阶乘 3 递归的进入 4 递归的退出 5 递归的条件 1 什么是递归函数 一个函数在它的函数体内调用它自身称为递归调用 这种函数称为递归函数 执行递归函数将反复调用其自身 每调用一次就进入新的一层 当
  • IPv6详解

    定义 128bit冒号分16进制 详解 2001 5 23位 24 32位 33 48位 49 64位 固定开头 regisrty isp prefix site prefix subnet prefix 地址类型 设备没有获取ipv6地址
  • 计算机编码发展历史和编码方式

    编码是信息从一种形式或格式转换为另一种形式的过程 也称为计算机编程语言的代码简称编码 用预先规定的方法将文字 数字或其它对象编成数码 或将信息 数据转换成规定的电脉冲信号 编码在电子计算机 电视 遥控和通讯等方面广泛使用 解码 是编码的逆过