1.3 字符编码

news2024/11/24 1:59:11

文章目录

      • 1. 编码
      • 2. ASCII 字符集
      • 3. 字符编码发展
      • 4. Unicode 字符集
      • 5. 字符编码
        • 5.1 UTF-16
        • 5.3 UTF-32
        • 5.3 UTF-8
      • 6. 文件编码转换
      • 7. 乱码问题

image-20221120203521912

1. 编码

计算机只能识别高低电平, 将高低电平用数字表示: '0'表示低电压, '1'表示高电平.
于是就创造出来'二进制数', 一个二进制有 '0'  '1', 两种状态, 
设计硬盘的目的就是为了能保存这两种状态.

想要将数据存储到硬盘中, 就必须将数据转化为二进制形式存储.
编码: 将数据将数据转化为二进制的过程.

2. ASCII 字符集

文本的最小组件是字符, 'A', 'B', 'C' 等都是不同的字符.
计算机是美国人发明的, 为了让加计算机能够识别所有的英文字符, 制作了 ASCII 字符集.
ASCII 字符集: 记录了英文字符与二进制的对应关系, 用一个字节来表示所有对应关系.
* 确定了计算机存储的最小单位: 字节 ( 8位二进制 ).
一位可以表示2种状态, 8 位可以表示 2 ** 8 = 266 种状态.
0   -  31   为控制字符: 不能用于打印控制的编码, 而是用于控制像打印机一样的外围设备.
32  -  127  为打印字符: 常用的数字, 大小写字母, 运算符号等.
128 -  255  为扩展码:   特殊符号字符, 外来语字母和图形符号, 法国字母注音符等.

image-20221120132729142

3. 字符编码发展

计算机普及世界, 各国为了能让电脑能识别自己的语言字符, 制作了不同的字符集.

中国编码:
GB2312 编码: 包含了 ASCII 编码, 扩充6000多个常用汉字, 英文占一个字节, 中文占两个字节.
GBK 编码: 包含了GB2312 编码, 扩充繁体字偏僻字, 英文占一个字节, 中文占两个字节.
GB18030 编码: 包含 GBK 编码, 扩充少数民族字符, 英文占一个字节,  中文占两到四个字节.
... 

其它各国相继开发自己的编码, 导致一段二进制在各国都是不同的意思.

4. Unicode 字符集

为了实现不同国家之间的文本数据能够彼此无障碍交流, 对编码进行统一制作了 Unicode 字符集.
将世界上所有的符号都纳入其中, 每一个符号都给予一个独一无二的编码, 
目前 Unicode 5.0 收录的字符已经达到 99024 .

Unicode 字符集:
UCS-2 固定使用两个字节编码, 两个字节 2 ** 16 = 65536种状态, 容纳世界上常用书面字符,
不兼容 ASCII , ASCII 码转 Unicode 编码时, 8位保持不变, 8位只需要用0去补全即可.
对中文的兼容性不好, 汉字根据不完全统计汉字大约有十万个左右, 两个字节不足以完全收纳汉字.

UCS-4 4个字节编码, 为了防止将来2个字节不够用才开发的.  4个字节 2 ** 32 = 4294967296种状态.
容纳世界上所用书面字符, 不兼容 ASCII , 兼容中文.

5. 字符编码

Unicode 虽然统一了编码, 但没有规定如何存储, 导致 Unicode 出现了的多种存储方式,
: UTF-8, UTF-16, UTF-32 ...

'字符集''字符编码'不是一个概念.
字符集:   定义了文字和二进制的对应关系, 为字符分配了唯一的编号.
字符编码: 规定了如何将文字的编号存储到内存中, 但凡涉及字符的存储都需要考虑字符编码的问题.

5.1 UTF-16

UTF-16 编码源于 UCS-2, 固定使用两个字符表示一个字符,  Unicode 最早的编码方式 (不兼容 ASCII ).

5.3 UTF-32

UTF-32 编码源于 UCS-4 , 固定使用四个字节表一个字符, 当前主流, (不兼容 ASCII ).

5.3 UTF-8

UTF-8 可变长字符, 使用1~4个字节表示一个符号, 当存储英文时只使用一个字节, 
而存储中文字符时, 使用三个字节来表示 (兼容 ASCII ).
 
为什么设计为可变长?
UTF-16  UTF-32 缺点就是它们固定使用两个或四个字节,
书写文本时如果文本中多少 ASCII 的英文字符, 那么文件的体积翻倍.
* 目前主流使用的都是 UTF-8.

6. 文件编码转换

文件的数据最初产生在还是在内存, 那么内存也需要使用字符编码.
UTF-8 长度不固定, 在内存处理字符变得复杂, : 不知道申请几个字节的空间...
文件的编码会自动转换: 
字符从文件中读取 utf-8 编码到内存时, 会自动转换为 Unicode 编码,
而从内存中将字符保存到文件时, 则自动转换为 utf-8 编码.

内存中存储字符时使用 unicode 编码, 因为 unicode 编码的长度固定, 
而在文件的存储中, 则使用 utf-8 编码可以压缩内存, 节省空间.

7. 乱码问题

一串字符的二进制数, 想要解码, 就必须知道它的编码方式, 不然就会出现我们有时候看到的乱码.

GIF 2022-11-20 20-22-24

只有某个编码包含的 ASCII, 就能识别英文字符.

GIF 2022-11-20 20-24-36


文章的段落全是代码块包裹的, 留言0是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言1是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言2是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言3是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言4是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言5是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言6是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言7是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言8是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言9是为了避免文章提示质量低.


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

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

相关文章

【网络工程】5、路由器介绍及配置实操

接上篇《4、企业级交换机配置》 之前我们通过eNSP完成了一个企业级交换机的配置实例,本篇我们继续来讲解网络设备——路由器的介绍,以及完成路由器的相关配置实操。 当我们申请了一条宽带后,一般都需要一台路由器来进行上网,那么…

SpringBoot项目创建及其核心设计思想

参考了很多相关博客: springboot怎么学? - 知乎 如何解读springboot 中约定大于配置、JPA是什么、咋用_打豆豆。的博客-CSDN博客 SpringBoot约定大于配置到底是什么意思?_zhupanlinch的博客-CSDN博客 SpringBoot约定大于配置的特性解读 & SpringBoot…

胶囊网络深入理解

胶囊网络的概念与理解 胶囊网络概述 人工神经元不应当追求神经元活动中的视角不变性,(使用单一的标量输出来总结一个局部池中的重要特征的检测器的活动)。而应当使用局部的胶囊,这些胶囊对其输入执行一些相当复杂的内部计算。然…

【Java】Java中时间的相关类(Date,SimpleDateFormat)

文章目录Date类SimpleDateFormat类Date类 Date是JDK提供的类,用来描述时间,使用无参构造创建的对象默认表示系统的当前时间,使用有参构造(指定的毫秒值)表示从时间原点(1970年)过了该参数值的时…

08_原始套接字

知识点1【原始套接字概述】 1、UDP封包格式 ​IP封包格式: Ethernet封包格式 TCP封包格式: ICMP封包格式:ping 知识点2【数据包的分析】 案例:网络分析器: 知识点2【混杂模式】接受数据(了解&#x…

win11+WSL2安装visdom

win11WSL2安装visdom环境配置下载visdom小小的修改运行visdom环境配置 Win11WSL2Ubuntu-18.04 下载visdom pip install visdom pip install --upgrade visdom conda install -c conda-forge visdom 小小的修改 \home\grass\miniconda3\envs\torch\lib\python3.8\site-pack…

[一篇读懂]C语言九讲:线性表应用

[一篇读懂]C语言九讲:线性表应用1. 与408关联解析及本节内容介绍1 与408关联解析2 本节内容介绍2. 线性表的顺序表示原理解析1 线性表线性表的定义线性表的特点2 线性表的顺序表示顺序表的定义顺序表优缺点顺序表插入操作顺序表删除操作动态分配3. 顺序表的初始化及…

微服务系列之单体架构

随笔 终于迎来了“微服务、云原生”系列文章,这个系列的文章的更新速度博主无法保证能够每个星期一篇,因为这个系列的难度比以往系列都要高(以往的系列就没有保证一个星期一更)。但是长时间不去写文章,自己可能会慢慢…

Keepalived+LVS部署

目录 一、环境准备 二、实验拓扑 三、部署LVS DR环境 四、LVS服务器配置keepalived 1、安装keepalived 2、修改lvs1服务器keepalived配置 3、修改lvs2服务器keepalived配置 五、客户端测试 1、负责均衡测试 2、LVS服务器高可用测试 一、环境准备 准备4台centos服务器…

学习日记(单元测试、反射、注解、动态代理)

文章目录学习日记(单元测试、反射、注解、动态代理)一、单元测试1. 单元测试实践2. JUnit 常用注解二、反射1. 反射获取类对象2. 反射获取构造器对象3. 反射获取成员变量对象4. 反射获取成员方法对象三、反射的作用举例1. 绕过编译阶段为集合添加数据2. …

基于生物地理学的优化算法(BBO)用于训练多层感知器(MLP)【多种算法进行比较】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

java中的BigDecimal使用

文章目录1、什么是BigDecimal?2、为什么使用BigDecimal?3、如何使用BigDecimal?(1)BigDecimal初始化赋值(2)加减乘除运算(3)BigDecimal保留两位小数及舍入模式&#xff0…

WFP实现侧边栏导航菜单

菜单导航功能实现,常规的管理系统应该常用,左侧显示菜单条目,点击菜单,右侧切换不同的业务用户控件。 常用菜单可以采用TreeView树形控件特定样式实现 ,本文介绍的是使用ExpanderListView的组合形式实现的导航菜单&am…

算法day24|理论基础77

详细布置 理论基础 什么是回溯法:递归函数下面通常有回溯法 它使用的地方:组合,切割,子集,排列,棋盘问题(N皇后,解数独) 回溯算法的模板: void backtracking(参数)&…

微型计算机基础

微型计算机常用术语 位(bit):计算机所能表示的最基本,最小的数据单元。1个二进制位有两种状态0和1 通常情况下0表示低电平(接地),1表示高电平接电源(VCC) 字节&#xff0…

MATLAB 矩阵处理及多项式计算

一、实验目的 (1)掌握生成特殊矩阵以及矩阵处理的方法 (2)掌握数据统计和分析的方法 (3)掌握多项式的常用计算 二、实验原理与实验设备 原理:计算机编程相关知识技能和MATLAB软件编译环境 …

c++——map和set的封装

注:该封装基于前面博客已实现红黑树,map和set封装并不难,主要还是对红黑树的理解 目录 一. 改造红黑树 1. 改变节点的定义,使用更高维度的泛型 2. 红黑树追加迭代器的实现 1. 红黑树迭代器的构造函数和基本框架 2. begin()和e…

2.4、编码与调制

2.4、编码与调制 在计算机网络中。计算机需要处理和传输用户的文字,图片,音频和视频。它们可以统称为消息。 数据是运送消息的实体。 计算机中的网卡将比特 000 和 111,变换成相应的电信号发送到网线。 也就是说,信号是数据的…

[附源码]java毕业设计网络学习平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

LeetCode力扣刷题——更加复杂的数据结构

更加复杂的数据结构 一、引言 目前为止,我们接触了大量的数据结构,包括利用指针实现的三剑客和 C 自带的 STL 等。 对于一些题目,我们不仅需要利用多个数据结果解决问题,还需要把这些数据结构进行嵌套和联 动,进行更为…