什么是编码和解码

简介: 什么是编码和解码

编码和解码概念


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

 我对编码和解码的理解:编码是根据一种编码规则,将我所要表达的信息用代码去表示出来;解码是根据解码规则(如果是对称加密的话,编码规则和解码规则是同一个规则),将代码解读出来。


举例说明


我们小时候经常会看一些谍战片,谍战片里总会出现一两个间谍,在敌方打探消息,然后用他和己方能看懂的方式去传递消息,如:摩斯密码。间谍敲出一串摩斯密码——三短三长三短,己方也会通过摩斯密码的规则来去解读对应的意思——SOS,己方就知道了这是求救信息,需要马上去营救被困在敌方的间谍。

 在这个例子中,如果间谍明白此规则,发出三短三长三短,向外求救,但不知道此规则的敌方,只能听到这个声音,而不知道其中的含义,就“单纯”的以为间谍无聊发出此声音。

 下图制定好的规则就指的是编码规则和解码规则,发出消息和解读消息的前提是双方都知道此规则,才会进行有效的消息传递。



对应到java程序中

为什么要编码?


最直接的回答就是防止我们的中文和一些特殊字符出现乱码的现象;详细点讲就是计算机只能识别0和1两个数字,所有的符号和文字都必须经过转换编码才能“翻译”成我们计算机认识的“语言”,相反也是,我们要想显示出我们能读懂的“语言”也必须要进行相应的解码才能从计算机中显示出我们能看懂的文字。


总的来说编码的原因有:

1.计算机中存储信息的最小单元是一个字节即 8 个 bit,所以能表示的字符范围是 0~255 个(2的8次方)

2.人类要表示的符号太多,每个符号无法用一个字节来完全表示

3.要解决这个矛盾必须需要一个新的数据结构 char,从 char 到 byte 必须编码


如何编码和解码呢?

那就是通过一种特定的编码格式转换,其实现在有很多中的编码格式,只要让计算机按照规定的编码格式进行转化,就可以显示成我们自己的字符。那现在就介绍一下目前最常见的一些编码格式:

首先我们要知道编码和编码格式是有区别的?

 编码就是一个编号(数字)到字符的一种映射关系,是一种一对一的映射关系。

ASCII码

 在计算机种中,1 字节对应 8 位二进制数,而每位二进制数有 0、1 两种状态,因此 1 字节可以组合出 256 种状态。如果这 256 中状态每一个都对应一个符号,就能通过 1 字节的数据表示 256 个字符。美国人于是就制定了一套编码(其实就是个字典),描述英语中的字符和这 8 位二进制数的对应关系,这被称为 ASCII 码。

 ASCII 码一共定义了 128 个字符,例如大写的字母 A 是 65(这是十进制数,对应二进制是0100 0001)。这 128 个字符只使用了 8 位二进制数中的后面 7 位,最前面的一位统一规定为 0。

Unicode

 Unicode 只是一个字符集,规定了符合对应的二进制代码,至于这个二进制代码如何存储则没有任何规定。它的想法很简单,就是为每个字符规定一个用来表示该字符的数字,仅此而已。

Unicode编码方案

 之前提到,Unicode 没有规定字符对应的二进制码如何存储。以汉字“汉”为例,它的 Unicode 码点是 0x6c49,对应的二进制数是 110110001001001,二进制数有 15 位,这也就说明了它至少需要 2 个字节来表示。可以想象,在 Unicode 字典中往后的字符可能就需要 3 个字节或者 4 个字节,甚至更多字节来表示了。


 这就导致了一些问题,计算机怎么知道你这个 2 个字节表示的是一个字符,而不是分别表示两个字符呢?这里我们可能会想到,那就取个最大的,假如 Unicode 中最大的字符用 4 字节就可以表示了,那么我们就将所有的字符都用 4 个字节来表示,不够的就往前面补 0。这样确实可以解决编码问题,但是却造成了空间的极大浪费,如果是一个英文文档,那文件大小就大出了 3 倍,这显然是无法接受的。

 于是,为了较好的解决 Unicode 的编码问题, UTF-8 和 UTF-16 两种当前比较流行的编码方式诞生了。当然还有一个 UTF-32 的编码方式,也就是上述那种定长编码,字符统一使用 4 个字节,虽然看似方便,但是却不如另外两种编码方式使用广泛。


 对于编码格式目前最常见的是UTF-8、GBK,它们都是用来序列化或存储 Unicode 编码的数据的,但是分别是2中不同的格式,他们都是 Unicode 的实现方式,当然也还有很多,这里就先介绍这两种啦。


GBK

 全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。

UTF-8

 UTF-8 采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6 个字节组成。

编码规则:

1.如果一个字节,最高位(第 8 位)为 0,表示这是一个 ASCII 字符(00 - 7F)。可见,所有 ASCII 编码已经是 UTF-8 了。

2.如果一个字节,以 11 开头,连续的 1 的个数暗示这个字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。

3.如果一个字节,以 10 开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节


目录
相关文章
|
监控 物联网 视频直播
流量卡类型及其适用场景
不同流量卡的使用场景可以根据其特点、套餐内容、价格以及用户的具体需求来划分。以下是一些常见的流量卡类型及其适用场景:
|
8月前
|
机器学习/深度学习 人工智能 安全
制造业工业4.0落地案例:AMR如何提升车间效率?
第四次工业革命为制造业带来了巨大的机遇与挑战。本文综合分析了工业4.0在制造业应用中的优势与局限,为企业更清晰地理解潜在障碍与收益提供参考。以自主移动机器人替代传统叉车为例,通过在主入口服务器、制造执行系统与仓储管理系统之间采用先进的API通信协议,不仅实现了物料搬运的智能化,还显著节省了工艺时间。通过对约15个工位的时间研究,记录到每班次节省约1.14小时。同时,时间与成本分析被用于支持企业的决策流程。成本分析基于5年周期构建了OPEX和CAPEX模型。在三种模型中,自主移动机器人的CAPEX模型被证明节省了30%的成本。
463 3
|
存储 机器人 计算机视觉
接入了支付宝账户体系的旅客入住无人酒店解决方案
本书第一章介绍了一套复杂的无人酒店云平台系统,涵盖核心云平台、容灾备份、数据存储、旅客服务、嵌入式设备管理、远程人工坐席、综合业务处理、问题解决、智慧监控安防等多个子系统。各平台协同工作,确保从旅客入住、服务请求、智能设备控制到退房的全流程高效运作,并与外部机构实时对接,保障数据安全与应急响应。系统通过人脸识别、语音交互等技术,提供个性化服务,同时具备严格的实名验证机制,确保合规性与安全性。
|
JSON API 数据格式
Python中获取HTTP请求响应体的详解
本文介绍了如何使用Python的`requests`和`urllib`库发送HTTP请求并处理响应体。`requests`库简化了HTTP请求过程,适合快速开发;`urllib`库则更为底层,适用于性能要求较高的场景。文章详细演示了发送GET请求、处理JSON响应等常见操作。
599 3
|
编解码 人工智能 文件存储
卷积神经网络架构:EfficientNet结构的特点
EfficientNet是一种高效的卷积神经网络架构,它通过系统化的方法来提升模型的性能和效率。
687 1
|
存储 索引 Python
字典是怎么实现的,它的底层结构长什么样子?
字典是怎么实现的,它的底层结构长什么样子?
460 2
|
存储 安全 编译器
C++ std::move以及右值引用全面解析:从基础到实战,掌握现代C++高效编程
C++ std::move以及右值引用全面解析:从基础到实战,掌握现代C++高效编程
1075 1
|
搜索推荐 Python Windows
python中对于wordcloud词云生成报错提示的解决
通过搜索印象错误信息:ValueError:Only supported for TrueType fonts,几乎大部分人给出的选项都是让你指定TrueType fonts路径,或者新下载TTF字体,并重新指定,但是这两种解决方案并无法解决报错。 在真正解决问题之前,先来介绍几个与之相关的知识点,对于有经验的人,这样的知识点完全是“小菜”,但是对于初学者,这种知识点就是因为缺少相关实践而无从下手,无从搜索引擎。
|
人工智能 自然语言处理 程序员
优刻得为智谱AI构建超千卡推理集群,让全球用户畅享大模型智能生活
在「智谱清言」的助力下,妈妈的小说创作焕发新生,她只需将自己的创意和构思输入给大模型,就可以生成自然生动的故事情节和对话;爸爸用大模型进行代码编程和调试,通过分析代码逻辑,大大减少了开发的繁琐流程,减轻了一大半的⼯作量;大模型也成为了小朋友学习上的得力助手,不仅能进行作业智能批改,还可以提供详实的解题思路,大幅提升了学习效率。
|
存储 安全 数据安全/隐私保护
利用Python实现简单的文本加密与解密
利用Python实现简单的文本加密与解密
772 8

热门文章

最新文章