详解--编码(ASCII\Unicode,UTF-8\UTF-16\UTF-32)
本文主要搞清楚编码是怎么回事。
参考链接
| 字符集 | 编码方式 | |
|---|---|---|
| ASCII(American Standard Code for Information Interchange) | ASCII | |
| GB2312 | GB2312 | |
| Unicode | UTF-8 / UTF-16 / UTF-32 |
1.编码基本概念
1.1 字符
- 字符(Character)
- 在计算机和电信技术中,一个字符是一个单位的字形、类字形单位或符号的基本信息。说的简单点字符是各种文字和符号的总称。
- 一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号、一个图形符号或者控制符号等。
1.2 字符集
- 字符集(Character Set):是指多个字符的集合。不同的字符集包含的字符个数不一样、包含的字符不一样、对字符的编码方式也不一样。
- 当前常用字符集:
- ASCII 字符集
只包含了128字符,这个字符集收录的主要字符是英文字母、阿拉伯字母和一些简单的控制字符。 - GB2312 字符集
是中国国家标准的简体中文字符集,GB2312收录简化汉字(6763个)及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。 - GBK字符集
- Unicode字符集
- ASCII码字符集,总共才能容纳256个字符,为了包含全世界各国语言的所有字符,后来就出现了Unicode字符集。
- Unicode是为整合全世界的所有语言文字而诞生的。任何文字在Unicode中都对应一个值。现在的规模可以容纳100多万个符号。
- 比如,U+0639 表示阿拉伯字母 Ain,U+0041 表示英语的大写字母 A ,U+4E25 表示汉字“严”。
- GB18030字符集、Big5字符集、等等
- ASCII 字符集
- 当前常用字符集:
1.3 字符编码
-
字符编码(Character Encoding)
字符编码是指一种映射规则,根据这个映射规则可以将某个字符映射成其他形式的数据以便在计算机中存储和传输。- 意义
计算机中数据传输都是二进制的01,那么人要看二进制数据01背后的含义(即看到真正的文本信息),那么就要用到编码。
这也就意味着任何计算机上的文件被打开或查看都要经过一次解码,被存储或传输都要经过一次编码.
- 意义
1.4 码点
- 码点(Code Point):有些地方翻译为 码值 或 内码。
- 是指在某个字符集中,根据某种编码规则将字符编码后得到的值。即编码时 二进制数据 和 字符集的映射关系。
- 例:
比如在ASCII字符集中,字母 A 经过 ASCII 编码得到的值是 65,那么 65 就是字符A在ASCII字符集中的码点。
- 例:
- 是指在某个字符集中,根据某种编码规则将字符编码后得到的值。即编码时 二进制数据 和 字符集的映射关系。
2. 详解编码
2.1 ASCII 字符集和 ASCII 编码
详见上文参考链接
2.2 Unicode 字符集 相关编码(UTF-8 \ UTF-16 \ UTF-32)
2.2.1 了解为什么 unicode 字符集编码分 3 种
- Unicode只是一个字符集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何编码如何存储。因此衍生出如下问题:
- 第一个问题是,如何才能区别Unicode和ASCII?
同时计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢? - 第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果 unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是 0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。
- 第一个问题是,如何才能区别Unicode和ASCII?
注意:
- 由上面问题衍生出如下三种编码方式,主要是 存储长度 的区别。
- 不同编码方式能容纳的字符个数取决于编码原理的是实现,而不是依赖于字符集的码点。
2.2.2 UTF-8 格式
-
特点:
变长的编码方式。
它可以使用 1~4 个字节表示一个符号,根据不同的符号而变化字节长度(UTF-8编码可以容纳2^21(为什么这么算看下面编码规则更清晰)个字符,总共200多万个字符)。 -
UTF-8 编码规则;
- 对于单字节的符号,字节的第一位设为 0,后面 7 位为这个符号的 unicode 码。因此对于英语字母,UTF-8编码和 ASCII 码是相同的。(对应下面一个字节)
- 对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。(对应下面二三四个字节)
- 如上UTF-8编码规则方式演示
字节数(变长) UTF 字节数 (十六进制) 二进制 编码提示(我自定义的,为了好理解下面的例子) 一个字节 0000 0000 0000 007F 0xxxxxxx 某字符的unicode字符码点为 7 位(二进制 x 的个数)以下的 两个字节 0000 0080 0000 07FF 110xxxxx 10xxxxxx 某字符的 unicode 字符码点为 11 位(二进制 x 的个数)以下的 三个字节 0000 0800 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 某字符的 unicode 字符码点为 16 位(二进制 x 的个数)以下的 四个字节 0001 0000 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 某字符的 unicode 字符码点为 21 位(二进制 x 的个数)以下的 - 按如上 UTF-8 编码规则示例,Unicode 字符集中 “严” 的 UTF-8 编码:
- 已知“严”的 unicode 是 \u4E25(100111000100101),这个可以通过在线工具查看
- 根据上表,可以发现 4E25(100111000100101,共 15 位二进制,满足上文三个字节的编码提示)处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的 UTF-8 编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。
- 然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。
这样就得到了,“严”的UTF-8编码是“11100100 10111000 10100101”,转换成十六进制就是 E4B8A5。
- 按如上 UTF-8 编码规则示例,Unicode 字符集中 “严” 的 UTF-8 编码:
2.2.3 Unicode 中名词 UCS-2 和 UCS-4
- Unicode是为整合全世界的所有语言文字而诞生的。任何文字在Unicode中都对应一个值, 这个值称为码点(code point,也称码值)。 码点的值通常写成 U+ABCD 的格式。
- 而文字和代码点之间的对应关系就是 UCS-2(Universal Character Set coded in 2 octets)。
顾名思义,UCS-2 是用两个字节来表示码点,其取值范围为 U+0000~U+FFFF。 - 为了能表示更多的文字,人们又提出了 UCS-4,即用四个字节表示代码点。它的范围为 U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2是一样的。
- 而文字和代码点之间的对应关系就是 UCS-2(Universal Character Set coded in 2 octets)。
- 注意
- UCS-2 和 UCS-4 只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。
- 规定存储方式的称为
UTF(Unicode Transformation Format),也就是我们提到的对于 unicode 字符集编码的 UTF8 格式以及UTF16、UTF32格式。
2.2.4 UTF-16 格式
-
它使用
两个字节来表示一个码点,完全对应于UCS-2。
即把 UCS-2 规定的码点通过 Big Endian(大端) 或 Little Endian(小端) 方式直接保存下来。 -
分类,UTF-16包括三种
-
UTF-16
UTF-16 就需要通过在文件开头以名为 BOM(Byte Order Mark)的字符来表明文件是 Big Endian 还是 Little Endian。- BOM为 U+FEFF 这个字符。
其实 BOM 是个小聪明的想法。
由于 UCS-2 没有定义 U+FEFF,因此只要出现 FF FE 或者 FE FF 这样的字节序列,就可以认为它是 U+FEFF,并且可以判断出是 Big Endian 还是 Little Endian。
- BOM为 U+FEFF 这个字符。
-
UTF-16BE(Big Endian)
-
UTF-16LE(Little Endian)
-
-
BOM(Byte Order Mark)用来放在文档的开头告诉阅读器该文档的字节序。
- UTF-8 不需要 BOM 来表明字节顺序,但可以用BOM来表明编码方式。
字符 “ZERO WIDTH NO-BREAK SPACE” 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节流,就知道这是UTF-8编码了。UTF-16 才需要加 BOM。因为它是按 Unicode 顺序编码,在 BMP 范围内是二字节,需要识别是大或小字节序。
- UTF-8 不需要 BOM 来表明字节顺序,但可以用BOM来表明编码方式。
2.2.4 UTF-32 格式
- UTF-32 用固定
四个字节表示代码点,这样就可以完全表示 UCS-4 的所有代码点,而无需像 UTF-8 那样使用复杂的算法。 - 与UTF-16 类似,UTF-32 也包括 UTF-32、UTF-32BE、UTF-32LE 三种编码,UTF-32 也同样需要BOM字符。
3. 文本编辑器怎么知道文本的编码
- 当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。
软件一般采用三种方式来决定文本的字符集和编码:
-
检测文件头标识(BOM)
EF BB BF UTF-8FE FF UTF-16/UCS-2, big endianFF FE UTF-16/UCS-2, little endianFF FE 00 00 UTF-32/UCS-4, little endian.00 00 FE FF UTF-32/UCS-4, big-endian. -
软件自己根据编码规则猜测当前文件的编码
-
提示用户自己输入当前文件的编码
myflag
by 2023.11.03 周一 晚不积跬步无以至千里
相关文章:
详解--编码(ASCII\Unicode,UTF-8\UTF-16\UTF-32)
本文主要搞清楚编码是怎么回事。 参考链接 字符集编码方式ASCII(American Standard Code for Information Interchange)ASCIIGB2312GB2312UnicodeUTF-8 / UTF-16 / UTF-32 1.编码基本概念 1.1 字符 字符(Character) 在计算机和…...
Linux安装配置awscli命令行接口工具及其从aws上传下载数据
官网技术文档有全面介绍:安装或更新 AWS CLI 的最新版本 - AWS Command Line Interface在系统上安装 AWS CLI。https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html#getting-started-install-instructionsawscli常用命令参考&…...
中国联通携手华为助力长城精工启动商用5G-A柔性产线
[中国,河北,2023年11月3日] 近日,中国联通携手华为助力精诚工科汽车系统有限公司保定自动化技术分公司(简称长城精工自动化)启动5G-A超高可靠性超低时延柔性产线的商用阶段。 在河北保定精工自动化工厂,5G…...
【自动化测试】Java+Selenium自动化测试环境搭建
本主要介绍以Java为基础,搭建Selenium自动化测试环境,并且实现代码编写的过程。 1.Selenium介绍 Selenium 1.0 包含 core、IDE、RC、grid 四部分,selenium 2.0 则是在两位大牛偶遇相互沟通决定把面向对象结构化(OOPP)…...
若依笔记(四):代码生成器
已知使用MyBatisPlus代码生成器可以自动生成Entity、Mapper、Service、Controller代码,前提是数据库中有数据表,生成pojo类以及对于该数据表的增删改查命令的代码,若依更进一步能选择表后生成代码、预览、下载,同时可以生产前端代…...
怎样做好金融投资翻译
我们知道, 金融投资翻译所需的译文往往是会议文献、年终报表、信贷审批等重要企业金融资料,其准确性事关整个企业在今后一段时期内的发展战略与经营成效。尤其像年报,对于上市公司来说更是至关重要的。那么,怎样做好金融投资翻译&…...
ubuntu 分区 方案
ubuntu 分区 方案 自动分区啥样子的? 手动分区 需要怎么操作? 注意点是啥? swap分区 要和 内存大小 差不多 安装ubuntu系统时硬盘分区方案 硬盘分区概述 一块硬盘最多可以分4个主分区,主分区之外的成为扩展分区。硬盘可以没有…...
Python自动化测试面试题总结
python有哪些数据类型怎么将两个字典合并python如何将json写到文件里?在except语句中return后还会不会执行finally中的代码?什么是可变、不可变类型?python函数调用时参数的传递是值传递还是引用传递?python深浅拷贝的区别python为…...
客户端性能测试基础知识
目录 1、客户端性能 1.1、客户端性能基础知识 2、客户端性能工具介绍与环境搭建 2.1.1、perfdog的使用 2.1.2、renderdoc的使用 1、客户端性能 1.1、客户端性能基础知识 客户端性能知识这里对2D和3D类游戏进行展开进行,讲述的有内存、CPU、GPU、帧率这几个模块…...
多模态论文阅读之VLMo
VLMo泛读 TitleMotivationContributionModelExpertimentsSummary Title VLMo:Unified Vision_Langugae Pre-Training with Mixture-of-Modality-Experts Motivation CLIP和ALIGN都采用dual-encoder的方式分别编码图像和文本,模态之间的交互采用cosine similarity…...
休闲类手游还有机会吗?两大策略收割全球玩家
刚刚过去的第三季度,是全球手游市场逆势增长的高光时刻。 买量、营收、下载等多项数据表现优异,其中买量最为突出的产品是休闲类游戏,广告主数占比23.76%断层第一,广告素材占比17.62%,是当之无愧的“广告顶流”。 数…...
Git复制代码
目录 一、常用下载代码 1.登录Git克隆SSH编辑 2.新建文件然后右键点击Git Bash Here 3.git clone Paste 二. 本地下载 1.从本地进入页面 2.生成代码——>导入——>生成代码后下载 3.解压道相应位置 一、常用下载代码 1.登录Git克隆SSH 2.新建文件然后右键点击…...
数据结构笔记——查找、排序(王道408)
文章目录 查找基本概念线性表查找顺序查找折半查找(二分)分块查找 树查找二叉排序树(BST)平衡二叉树(AVL)的插入平衡化复杂度分析 平衡二叉树的删除 红黑树红黑树的定义和性质红黑树定义红黑树性质 红黑树的…...
MySQL---搜索引擎
MySQL的存储引擎是什么 MySQL当中数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制,索引技巧 锁定水平,以及最终提供的不同的功能和能力,这些就是我们说的存储引擎。 MySQL存储引擎的功能 1.MySQL将数据存储在文…...
2022最新版-李宏毅机器学习深度学习课程-P32 Transformer
一、 seq2seq 1. 含义 输入一个序列,机器输出另一个序列,输出序列长度由机器决定。 文本翻译:文本至文本; 语音识别:语音至文本; 语音合成:文本至语音; 聊天机器人&#…...
如何使用商品详情API接口获取商品数据:一篇详尽的论述
一、引言 商品详情API接口是一种用于获取商品详细信息的应用程序接口。通过调用该接口,我们可以获取商品的名称、价格、描述、图片以及其他相关属性。对于电商平台、价格比较网站、数据分析等应用场景来说,商品详情API接口提供了便捷的数据获取方式。本…...
华为:手机王者归来,汽车起死回生
作为一家全球知名的科技公司,华为在通信、智能手机、平板电脑等领域拥有很高的市场份额和品牌影响力。而随着华为开始进军汽车领域,通过自主研发和合作,不断提升自己在汽车领域的竞争力,华为便也开始受到更为广泛的关注。 只不过…...
Vue3.0 provide与inject依赖注入:VCA
简介 provide 与 inject 是一种跨层级组件(祖孙)通信方式。当组件多层嵌套时,不需要将数据一层一层的向下传递,通过它俩可以实现跨层级组件通信。 provide:提供者 注入一个值,可以被后代组件接收。 prov…...
前端react入门day02-React中的事件绑定与组件
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 React中的事件绑定 React 基础事件绑定 使用事件对象参数 传递自定义参数 同时传递事件对象和自定义参…...
工业5G路由器;小体积 千兆高速通信组网
计讯物联工业路由器TR232,5G高速网络,超低时延、高可靠性,小体积、易安装、强兼容,串口/网口多设备接入联网,为用户提供高速稳定的数据传输通道 。 小体积5G工业路由器TR323,外形1047824mm࿰…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
