字符集、编码格式的理解

news2025/1/21 11:21:51

计算机中只能存储二进制01, 要想存储字符,就要有一个字符与编码的映射关系,这个关系就是字符集。
字符集就是字符与编码的映射关系*
字符集的发展历程:

  1. 因为计算机是欧美先发明的,他们的语言就26个字母,所以他们编制了ASCII字符集就够用了。
  2. 后来中国也引入了计算机,汉字也要在计算机中展示,然后国家编制了GB 2312字符集,这个字符集中包含了绝大部分常用的简体中文汉字。
  3. 为了兼容繁体汉字,后来国家又对GB2312进行了拓展,新推出了一个字符集GBK,GBK字符集是包含简体和繁体汉字的。
  4. 为了统一字符集,以便计算机发展,美国的出现了一个组织,这个组织推行叫做Unicode的字符集,这个字符集能够表示世界上绝大部分的字符,中文、韩文、日文、阿拉伯文等等都可以表示,也被称作“万国码”。

下面我们就来详细说一说这几个字符集。

ASCII字符集

相信只要学过计算机的,对ASCII码不陌生。

在ASCII字符集中,规定了128个字符,因此在计算机中用1个字节就能表示,每个字符有唯一的一个序号,序号从0开始到127结束,当我们要存储一个字符时,只要找到这个字符表示的序号,然后存储这个序号的二进制即可。
比如说:我们要存储a这个字符,根据ASCII字符表可以得知,a的序号是97,那97用二进制表示就是110 0001,因为ASCII需要用1个字节表示,不足8位,高位补0,因此计算机真正存储的内容是0110 0001。
将字符映射到二进制的这个过程,叫做编码
而将二进制翻译成字符的过程,叫做解码

同理:当我们查看字符时,计算机从底层取出1个字节的内容0110 0001,将这个二进制转换为十进制就是97,依照ASCII表,序号为97的字符是a,然后就将字符a展示出来了。

总结:

  • ASCII字符集用1个字节就能表示
  • ASCII只能表示英文字符以及一些常见的字符,共128个。

GBK字符集

在简体中文的Windows系统中,默认的编码集就是GBK。
GBK是兼容ASCII的,因此ASCII规则在GBK中同样适用

GBK是这样来规定的:

  • **对于ASCII字符集,在GBK中同样使用,例如a在GBK中同样是97
  • 对于汉字,要求使用2个字节来表示,第一个字节的首位必须是1(转换为十进制后是一个负数)
    为何汉字的第一个字节的首位必须是1,这是因为ASCII中所有字符的序号序号都是正数,正数的字节首位肯定是0,这样做是为了区分英文和中文。
    字节是计算机中的最小单位,所以当计算机读取一个字节的数据时,检测到这个字节的首位是0,那么就知道这是ASCII中的字符,只要这一个字节就好了。
    当读取到一个字节的首位是1时,那么就知道这个是汉字,还需要继续读取一个字节,这两个字节共同组成一个汉字。

总结

**- GBK兼容ASCII,对于ASCII字符,用1个字节来表示

  • 汉字用2个字节来表示,为了与ASCII字符区分,第一个字节的首位是1

Unicode字符集

Unicode是支持全世界大部分的字符的,因此也是目前应用最广泛的一种字符集。
Unicode同样是一张映射表,只不过这张表是非常非常大,是完全兼容ASCII的,a的序号同样是97。

但是Unicode的编码方案是不唯一的,对于用几个字节来存储有不同的方案,最先提出的一种编码方案是UTF-16,UTF的全称是Unicode Transfer Format(Unicode字符集转换方式)。可以认为UTF是Unicode的实现方式

  • UTF-16规定用2~4个字节表示一个字符
  • UTF-32规定用固定4个字节来表示一个字符
  • UTF-8规定用1~4个字节来表示一个字符,目前最广泛的解决方案。
    由于UTF-16和UTF-32实现的方式有些浪费,因此目前大部分都是用UTF-8的编码格式。
    注意:UTF-8不是字符集,而是一种编码格式,是Unicode的一种解决方案。

UTF-8的编码规则:

  • 对于ASCII中的字符,使用1个字节来表示
  • 一些小众的语言,用2个字节表示,例如拉丁文、阿拉伯文等
  • 汉字使用3个字节来表示,其实中日韩的文字都是3个字节
  • 其他非常非常小众的语言,就用4个字节来表示
    只需要知道在UTF-8编码格式下,ASCII字符用1个字节来表示,汉字用3个字节来表示

不同字节的编码方案:

除了ASCII的字符编码的一个字节是整数外,其他的每个字节都是负数,这样做的目的是用来识别几个字符才是一个完整的字符

总结

  • Unicode字符集兼容目前大部分的字符
  • Unciode字符集的编解码有不同的方案,目前主流的是UTF-8编码格式
  • UTF-8编码格式下,ASCII字符是1个字节,一个汉字是3个字节

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

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

相关文章

MyBatis-plus使用

1 基础介绍 MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 它已经封装好了一些crud方法,我们不需要再写…

速学数据结构 | 手把手教你会单链表的构建方式

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《初阶数据结构》《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活! 文章目录 📋 前言1. 什么是链表1.1 链表的物理结构1.2 链表的种类 2. 链表的实现一. SList.h 单链表的声明3.…

10. 激光雷达到车身坐标系外参的标定方法(lidar2car)

目录 0. 论文及代码1. 标定原理2. 拟合平面3. 标定roll/pitch/height4. 标定yaw4.1 理解从B_spline拟合的轨迹中得到vehicle航向 5. 精度 0. 论文及代码 参考论文:SensorX2car: Sensors-to-car calibration for autonomous driving in road scenarios 参考代码&…

kafka初体验基础认知部署

kafka 基础介绍 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。 Kafka是一个分布式的发布-订阅消息系统,可以快速地处理高吞吐量的数据流,并将数据实时地分…

医院PACS系统源码 PACS系统源码

医用软件中的影像归档与传输系统软件(Picture Archiving and Communication System,简称PACS)是一种用于存储、管理和传输医学影像数据的系统。其主要功能包括: 影像存储:PACS可以将医学影像数据以数字化的形式存储在服…

YoloV8训练自己的模型 Pycharm Remote Development

参考视频:https://www.youtube.com/watch?vm9fH9OWn8YM YOLO官方网站:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite 在本地的pycharm上面建立一个项目 使用scp把代码传…

星球作业(第十一期)Android中Binder简述

Binder 什么是binder?简述下它的工作过程和使用场景。 什么是Binder? Binder是Android中的一个类,实现了IBinder接口; 从IPC的角度来说,Binder是Android中的一种通讯方式; 从Android Framework角度来说&a…

一文搞清楚Java中常见的IO模型

什么是IO 首先,我们要清楚什么是IO,根据冯诺依曼结构,计算机结构分为5部分:运算器、控制器、存储器、输入设备和输出设备。 输入设备和输出设备都属于外设,网卡、硬盘这种既可以属于输入设备也可以属于输出设备。 输入…

深度学习-卷积神经网络-ResNET

文章目录 前言1.resnet2.作者3.精度(TOP-5)4.论文一览5.竞赛排名6.网络退化7.残差8.残差 1.作者 前言 本文来自B站: ResNet深度残差网络 1.resnet 2.作者 3.精度(TOP-5) 4.论文一览 5.竞赛排名 6.网络退化 ResNet解…

拆解常见的6类爆款标题写作技巧!

究竟是先写好文章再拟标题还是先确定标题再写文章呢?很多写稿小白都会有这样的疑惑。 在“人人皆可新媒体”的时代,公众号推文类型琳琅满目,每个人都可以建立自己的公众号,写出自己想写的文章。 但怎样起标题、起什么样的标题&a…

MyCat安装文档

JDK安装 JDK具体安装步骤如下: 1. 上传安装包 使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux 由于上述在进行文件上传时,选择的上传目录为根目录 /,上传完毕后,我们执行指令 cd / 切换到根目录下,查…

STM32 10个工程篇:1.IAP远程升级(六)

在IAP远程升级的最后一篇博客里,笔者想概括性地梳理总结IAP程序设计中值得注意的问题,诚然市面上或者工作后存在不同版本的IAP下位机和上位机软件,也存在不同定义的报文格式,甚至对于相似的知识点不同教程又有着完全不同的解读&am…

You Know What is C++嵌套类

C嵌套类 一、嵌套类1.嵌套类和访问权限2.作用域3.访问控制 一、嵌套类 在一个类的内部定义另一个类,我们称之为嵌套类,或者嵌套类型。引入嵌套类,因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现&…

黑马JVM总结(二十七)

(1)synchronized代码块 synchronized代码块的底层原理,它是给一个对象进行一个加锁操作,它是如何保证如果你出现了synchronized代码块中出现了问题,它需要给这个对象有一个正确的解锁操作呢,加锁解锁是成对…

为什么网络安全明明缺口很大,却看起来招聘很少呢?

2023 年我国网络空间安全人才数量缺口超过了 140 万,就业人数却只有 10 多万,缺口高达了 93%。这里就有人会问了: 1、网络安全行业为什么这么缺人? 2、明明人才那么稀缺,为什么招聘时招安全的人员却没有那么多呢&…

10、【Qlib】【主要组件】高频交易嵌套决策执行框架

10、【Qlib】【主要组件】高频交易嵌套决策执行框架 简介简介 日间交易(例如,投资组合管理)和当日交易(例如,订单执行)是量化投资中的两个热门话题,并且通常会分别进行研究。 为了获得日间和当日交易的联合交易绩效,它们必须相互作用,并共同进行回测。为了支持多级的…

7.Tensors For Beginneers - Convector Components

介绍协向量时,曾说过它们有点像 行向量, 行向量确实以某种方式代表了协向量, 这里说明一下: 协向量是不变的; 协向量组件是可变的。 协向量不依赖坐标系,协向量的组件取决于坐标系。 当我们说协向量具有组…

基于SSM的旅游攻略网站设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

【SpringCloud】微服务技术栈入门3 - Gateway快速上手

目录 GatewayWebFlux网关基本配置过滤器与断言工厂全局过滤器跨域处理 CORS Gateway WebFlux gateway 基于 webflux 构建 WebFlux 是基于反应式流概念的响应式编程框架,用于构建异步非阻塞的 Web 应用程序。它支持响应式编程范式,并提供了一种响应式的方…