常用编码格式整理

什么是字符集,字符编码,编码和解码:

字符集
将一些自然语言中的字符组成一个集合;
字符编码
字符编码,就是建立一套自然语言中的“字符”跟计算机能够存储 处理的二进制数的映射的规则。
即在一个字符集内,用一个特定的二进制数表示一个唯一“字符”,类似于学号跟学生的映射关系。
为什么需要编码
当数据不利于处理、存储的时候,就需要对它们进行编码。
对字符进行编码是因为自然语言中的字符不利于计算机处理和存储。
编码和解码
根据实际需求的差异,编码、解码算法有可能会很复杂,也有可能非常的简单,
但是从根本上来讲,编码、解码只是在做翻译工作,将一种形式的数据翻译为另一种形式的数据,
如,最简单的编码、解码就是相当于从一个Map中根据key查找value,然后使用value代替实际数据中的key的值。

ASCII编码

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

在这里插入图片描述

GBK编码

中国人为了能够正常使用计算机这一伟大方明,做出了多方面的努力。GB2312 就是这一努力的成果, 该标准于1980年发布,1981年5月1日开始实施。它标志着我国在使用电子计算机方面迈出了重要的一步。GB2312 编码共收录了6763个汉字,同时还兼容 ASCII。这一字符编码基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆 99.75% 的使用频率,然而对一些古汉语和繁体字 GB2312 没法处理。
1995 年发布的GBK 的编码,是对 GB2312 的补充和扩展。GBK 不仅收录了 GB2312 中的全部汉字、非汉字符号,同时还收录了日韩语中出现的汉字,如韩国著名围棋手李世乭中的乭 GBK 编码是 0x8168(0x表示16进制)。这里可以查询汉字对应的 GBK 编码。
GBK 编码一般用两个字节表示一个字符,如果是英文字母,则使用一个字符,与ASCII编码相同,因此,GBK 也是兼容 ASCII 编码的,但并不与任何扩展的ASCII编码兼容。这可以从它的编码序列看出来。
GBK 采用双字节表示,总体编码范围为 0x8140-0xFEFE(1000000101000000-1111111011111110),首字节在 0x81-0xFE 之间,尾字节在 0x40-0xFE之间。可以看出首字节最高位都为1,这样一来,如果一个连续的二进制串中,尾字节之后的字节最高位为0,那么就可以解析为一个ASCII编码字符,否则就是一个连续的二字节字符。

Unicode编码

Unicode编码是为了囊括所有语言中的字符制定的,它规定了每一个字符所对应的唯一的二进制代码,称之为码点(code point)。Unicode是一个很大的集合,目前的规模可以容纳100多万个符号。
这么多符号,Unicode不是一次性定义的,而是分区定义。每个区可以存放 65536个( 216 )字符,称为一个平面(plane)。目前,一共有17个平面。
最前面的65536个字符位,称为基本平面(缩写BMP),它的码点范围是从0一直到 216 -1,写成16进制就是从U+0000到U+FFFF。所有最常见的字符都放在这个平面,这是Unicode最先定义和公布的一个平面。
剩下的字符都放在辅助平面(缩写SMP),码点范围从U+010000一直到U+10FFFF。

每个符号的编码都不一样,这么多的字符,想要以二进制形式表示,就需要比较多的字节才能够一一对应。标准的 Unicode(也就是第一个平面,BMP)采用4个字节表示一个字符串。比如,U+0639 表示阿拉伯字母 Ain,U+0041 表示英语的大写字母 A,U+4E6D 表示汉字"乭 "。显然,Unicode 和 GBK 是不兼容的。
Unicode 没有规定字符对应的二进制码如何存储。以汉字“汉”为例,它的 Unicode 码点是u+0x6c49,对应的二进制数是 110110001001001,二进制数有 15 位,这也就说明了它至少需要 2 个字节来表示。可以想象,在 Unicode 字典中往后的字符可能就需要 3 个字节或者 4 个字节,甚至更多字节来表示了。

这就导致了一些问题,计算机怎么知道你这个 2 个字节表示的是一个字符,而不是分别表示两个字符呢?这里我们可能会想到,那就取个最大的,假如 Unicode 中最大的字符用 4 字节就可以表示了,那么我们就将所有的字符都用 4 个字节来表示,不够的就往前面补 0。这样确实可以解决编码问题,但是却造成了空间的极大浪费,如果是一个英文文档,那文件大小就大出了 3 倍,这显然是无法接受的。
于是,为了较好的解决 Unicode 的编码问题, UTF-8 和 UTF-16 两种当前比较流行的编码方式诞生了。当然还有一个 UTF-32 的编码方式,也就是上述那种定长编码,字符统一使用 4 个字节,虽然看似方便,但是却不如另外两种编码方式使用广泛。

UTF-8

UTF-8 是 Unicode 的一种实现方式,它规定了使用 Unicode 编码的字符如何存储和传输。UTF-8 是目前互联网上使用最广泛的一种 Unicode 编码方式,它的最大特点就是可变长。它可以使用 1 - 4 个字节表示一个字符,根据字符的不同变换长度。编码规则如下:
1、对于单个字节的字符,第一位设为 0,后面的7位对应这个字符的 Unicode 码点。因此,对于英文中的 0 - 127 号字符,与 ASCII 码完全相同。这意味着 ASCII 码那个年代的文档用 UTF-8 编码打开完全没有问题。
2、对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设位 10,剩下的二进制位则使用这个字符的 Unicode 码点来填充。

编码规则如下:
Unicode 十六进制码点范围 UTF-8 二进制
0000 0000 - 0000 007F 0xxxxxxx
0000 0080 - 0000 07FF 110xxxxx 10xxxxxx
0000 0800 - 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000 - 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

根据上面编码规则对照表,进行 UTF-8 编码和解码就简单多了。下面以汉字“汉”为利,具体说明如何进行 UTF-8 编码和解码。
“汉”的 Unicode 码点是 0x6c49(110 1100 0100 1001),通过上面的对照表可以发现,0x0000 6c49 位于第三行的范围,那么得出其格式为 1110xxxx 10xxxxxx 10xxxxxx。接着,从“汉”的二进制数最后一位开始,从后向前依次填充对应格式中的 x,多出的 x 用 0 补上。这样,就得到了“汉”的 UTF-8 编码为 11100110 10110001 10001001,转换成十六进制就是 0xE6 0xB1 0x89。

解码的过程也十分简单:如果一个字节的第一位是 0 ,则说明这个字节对应一个字符;如果一个字节的第一位1,那么连续有多少个 1,就表示该字符占用多少个字节。

HTML实体编码(HTML_ENTITY)

在 HTML 中,某些字符是预留的,在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签。 如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用字符实体(character entities)。
HTML实体编码主要用于输出某些无法作为普通文本显示的字符。HTML 实体是一段以连字号(&)开头、以分号(;)结尾的文本(字符串)。实体常常用于显示保留字符(这些字符会被解析为 HTML 代码)和不可见的字符(如“不换行空格”)。
(1)部分字符在html文件中作为html结构解析
(2)某些字符被特殊处理,比如空格
(3)某些字符无法直接输入,比如带声调符号

常用实体编码:
实体编号(HTML_CODE)和实体编码作用相同,也可以用来帮助浏览器识别预留字符。对于ASCLL码的转换前127都可以&#0~127;实体编号来一一对应。
十六进制实体编号(HEX_CODE)将实体编号改成16进制格式。

在这里插入图片描述

在前端,一般为了避免 XSS 攻击,会将 <> 编码为 < 与 >,这些就是 HTML 实体编码。网站后台的识别仅仅针对字符串,而浏览器解析的时候又可以将其还原,因此可以达到绕过的效果。
浏览器总是会截短 HTML 页面中的空格,如果您在文本中写 10 个空格,在显示该页面之前,浏览器会删除它们中的 9 个,如需在页面中增加空格的数量,您需要使用   字符实体。

URL编码

URL 之所以需要编码,是因为 URL 中的某些字符会引起歧义,比如若 URL 查询参数中包含”&”或者”%”就会造成服务器解析错误,再比如,URL 的编码格式采用的是 ASCII 码而非 Unicode,这表明 URL 中不允许包含任何非 ASCII 字符(比如中文),否则就会造成 URL 解析错误。URL 编码的原则是使用安全字符(即没有特殊用途或者特殊意义的字符)去表示那些不安全的字符。
对于非ASCII字符,RFC文档建议使用utf-8对其进行编码得到相应的字节,然后对每个字节执行百分号编码。如"中文"使用UTF-8字符集得到的字节为0xE4 0xB8 0xAD 0xE6 0x96 0x87,经过URL编码之后得到"%E4%B8%AD%E6%96%87"。
由于URL中好多字符是保留字,他们在URL中具有特殊的含义。如“&”表示参数分隔符,如果想要在URL中使用这些保留字,那就得对他们进行编码。
1、对URL中属于ASCII字符集的非保留字不做编码;
2、对URL中的保留字需要取其ASCII内码,然后加上“%”前缀将该字符进行替换(编码);
3、对URL中的非ASCII字符需要取其Unicode内码,然后加上“%”前缀将该字符进行替换(编码)。

由于这种编码是采用“%”加上字符内码的方式,所以,有些地方也称其为“百分号编码”。URL中的保留字符包括:! * ’ ( ) ; : @ & = + $ , / ? # [ ]

CSS特殊符号

CSS中有一些特殊符号,需要在编号前面加上反斜杠“”进行转义,比如说“向左箭头”符号对应的CSS编号是:“21E0”,那么在文档中需要写成“\21E0”;

常用字符编码对照表

在这里插入图片描述

彻底弄懂 Unicode 编码
HTML特殊字符编码对照表(最全特殊字符编码)
Unicode 字符百科
你所不知道的unicode字符编码
URL编码是什么?
基础概念——URL编码

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

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

相关文章

2023新版Spring6全新讲解-核心内容之事务管理

Spring核心之事务 一、JdbcTemplate JdbcTemplate是Spring框架对JDBC操作进行的封装&#xff0c;可以简化方便对数据库的操作。 1.数据库表结构 准备一张普通的表 CREATE TABLE t_student (id int NOT NULL AUTO_INCREMENT,name varchar(32) DEFAULT NULL,age int DEFAULT N…

树和子树的定义

在数据结构中存在一种叫“树”的结构。 树的定义&#xff1a; 树&#xff08;tree&#xff09;是由n&#xff08;n>0)个节点&#xff08;或元素&#xff09;组成的有限集合&#xff08;记为T&#xff09;。 如果n0&#xff0c;它是一棵空树&#xff0c;这是树的特征。如果…

“树的子结构”

描述 输入两棵二叉树A&#xff0c;B&#xff0c;判断B是不是A的子结构。&#xff08;我们约定空树不是任意一个树的子结构&#xff09; 假如给定A为{8,8,7,9,2,#,#,#,#,4,7}&#xff0c;B为{8,9,2}&#xff0c;2个树的结构如下&#xff0c;可以看出B是A的子结构 数据范围: 0…

华为OD机试题【导师请吃火锅】【2023 B卷 100分】

文章目录 &#x1f3af; 前言&#x1f3af; 题目描述&#x1f3af; 解题思路&#x1f4d9; Python实现代码&#x1f4d7; Java实现代码&#x1f4d8; C语言实现&#xff1a; &#x1f3af; 前言 &#x1f3c6; 《华为机试真题》专栏含2023年牛客网面经、华为面经试题、华为OD机…

树的结构-树的各种定义及性质

树&#xff1a; n个结点组成的有限集合。 &#xff08;1&#xff09;有且仅有一个特定的称为根的结点。 &#xff08;2&#xff09;当n>1时&#xff0c;其余结点可分为m个互不相交的有限集合&#xff0c;其中每个集合本身又是一棵树&#xff0c;称为根节点的子树。 注意&…

VTK-vtkInformation

前言&#xff1a;本博文主要介绍vtk中的接口vtkInformation的应用&#xff0c;以及vtkInformation的衍生用法&#xff0c;希望对各位小伙伴有所帮助&#xff0c;谢谢&#xff01; 目录 vtkInformation介绍 描述&#xff1a; Information中接受的类型&#xff1a; 方法 vtk…

半导体(TSS)放电管的两大选购注意事项及选型小策略

固体放电管&#xff0c;是以半导体工艺制作而成的&#xff0c;因此我们也称为半导体&#xff08;TSS&#xff09;放电管&#xff0c;它常在电路中并联使用&#xff0c;具备伏安特性。 TSS放电管在电路中类似开关&#xff0c;在正常工作时不动作&#xff0c;但一般被保护电路受到…

PRE、RC、beta、RTM 含义扫盲

alpha版:内部测试版。α是希腊字母的第一个,表示最早的版本,一般用户不要下载这个版本,这个版本一般是作为技术预览的,很可能包含很多BUG,功能也不全,主要是给开发人员和测试人员测试和找BUG用的。——————————————————————————————————…

直播预告|RTM 助力信令与消息全球实时互通

RTM 是实时消息&#xff08;Real-time Messaging&#xff09;的简称。在实时互动场景中&#xff0c;用户通常有两种互动方式&#xff1a;一种是通过音视频进行互动&#xff0c;比如语音连麦、视频连麦等&#xff1b;另一种是通过非音视频的方式进行互动&#xff0c;比如文字聊天…

数据库sql server 2008 r2 RTM版本升级到sql server 2012 r2

(数据库sql server 2008 r2 RTM版本升级到2012) 1.先介绍sql 2008数据库的几个版本 10.00.1600其实就是SQL 2008 10.50.1600其实就是SQL 2008 R2 10.50.2500其实就是SQL 2008 R2 SP1 10.50.4000其实就是SQL Server 2008 R2 SP2 SQL Server 版本号汇总 那么sql server 2008后…

IBM LSF学习(是什么)

碎碎念&#xff1a;这里主要介绍&#xff0c;LSF是什么&#xff0c;本人秉承的写作原则或者技术学习原则&#xff0c;“是什么”&#xff0c;“为什么”&#xff0c;“怎么用”。 这里借鉴了这几篇文章并进行自我理解&#xff1a; https://blog.csdn.net/qq_43653083/article/d…

微软服务器操作系统指什么意思,现代服务器操作系统:你绝对想不到是什么!...

大家好&#xff0c;小编又和大家见面了。上一篇文章&#xff0c;我们了解了Windows Server 2008&#xff0c;今天&#xff0c;我们讲一讲Windows Server 2012。 Windows Server 2012(开发代号&#xff1a;Windows Server 8)是微软的一个服务器系统。这是Windows 8的服务器版本&…

直播选择 RTC 还是 RTMP?

RTC 实时直播 RTC&#xff08;Real Time Communication&#xff09;实时音视频通信&#xff0c;它最大的特点就是低延时和无卡顿。从功能流程上说&#xff0c;它包含了采集、编码、前后处理、传输、解码、缓冲、渲染等诸多环节&#xff0c;每一个细分环节&#xff0c;还有更细…

灰度测试是什么意思

本文章&#xff0c;百度论坛知乎等处查询&#xff0c;了解灰度测试&#xff0c;方便学习。本文章只限学习。文章可能内容多&#xff0c;我进行了网上查询终结&#xff0c;还需细看整理&#xff0c;如有重复内容请见谅&#xff0c;我也正在了解&#xff0c;方便手机携带查看。 …

MySQL安装流程 及 8.0与5.7区别

一、MySQL版本介绍 1、MySQL 8.0 窗口函数&#xff1a;MySQL 8.0版本支持窗口函数&#xff0c;这是数据分析工作中非常常用的一类函数。窗口函数可以让用户在单个查询中跨多个行检索数据&#xff0c;并在查询结果中对数据执行计算。隐藏索引&#xff1a;在MySQL 8.0版本中&am…

探究Cache缓存功能---【pytest】

前言 pytest运行完用例之后会生成一个 .pytest_cache的缓存文件夹&#xff0c;用于记录用例的ids和上一次失败的用例。 1、跑自动化时经常会出现这样一个情况&#xff0c;一轮自动化跑完后零星出现了几个失败测试用例&#xff0c;无法断定失败的原因&#xff0c;所以可能需要重…

浏览器插件检测淘宝订单是否淘客下单

1、插件安装 。 2、获取接口秘钥 &#xff0c;获取之后请将接口秘钥填写到本插件中。 3、登录淘宝/天猫已卖出报表列表&#xff0c;点击【检测淘客】按钮&#xff0c;等待返回检测结果&#xff1b;

帝国CMS淘宝客插件,帝国自动调用淘宝客插件链接自动转换

插件功能 可以根据根据设置的字段自动调用淘宝客商品数量&#xff0c;适用于各种资讯和导购站 具体看演示地址&#xff0c;可根据自己的样式来调用数据

淘宝客接入PHP(一)

1、文件位置 extend/tbk文件里面 2、引入tbk的sdk Loader::import(TopSdk, EXTEND_PATH."/tbk/taobaoke");3、修改autoload文件 直接运行报一下错误&#xff0c;是因为这个类给了namespace的原因。 两种解决方案&#xff0c;1、删除namespace 2、修改为spl_autoloa…