【Web技术】295- 重新复习 Unicode 和 UTF-8
点击上方“前端自习课”关注,学习起来~
引言
一直以来总是对 Unicode、 UTF-8 等编码知识懵懵懂懂的,尤其是在做项目过程中只要涉及到几个编码之间的转换,都得到网上搜索一番,根据别人的经验照葫芦画瓢,才能解决问题,但是私底下却完全不懂在做什么。
我再也不愿意重复这种状态了,于是就花了一个上午的时间,将这些知识整理了一遍。如果您觉得我的总结有疑问或者错误的地方,欢迎讨论交流,批评指正。
正题之前,先引入我总结的 Unicode 思维导图来预热下:
要了解 Unicode, 先要从 ASCII 码说起。
ASCII 码
什么是 ASCII 码?
ASCII 码(American Standard Code for Information Interchange)称为美国标准信息交换码。它是基于拉丁字母的一套电脑编码系统。它定义了一个用于代表常见字符的字典。
ASCII 码的局限在哪里?
ASCII 当初只是为美国英语而设计的,只能显示 128 个编码,对其他的语言无能为力。要想显示其他语言的编码,还是要使用 unicode。
Unicode
什么是 Unicode ?
为了将全世界的文字都统一的记录下来,并将每个字符都用唯一的数字记录下来,于是就产生了Unicode。
Unicode 也称为 UCS(Universal Coded Character Set:国际编码字符集合) 是一个字符集合,对世界上大部分的文字系统进行了整理,编码,使电脑可以用更为简单的方式来呈现和处理文字。最新的版本 Unicode 11.0 已经包含了 137439 个字符。
Unicode 的数量之多,如果完全涵盖它, 需要用 4 个字节来表示,但是计算机存储过程中却不是必须都用 4 个字节来完成。对于有些字符,尤其是编码在前面的字符我们也可以通过 1 个或 两个字节来节省空间。这就涉及到了 unicode 的实现方式。
Unicode 的实现方式有几种?
Unicode 只是一个字符集合,每个字符用一个数字来表示,但是这些数字在计算机内采用什么方式来存储,是全部都是 4 个字节,还是 1 到 4 个字节不等,这就涉及到了字符编码的概念。
我们说 Unicode 有几种实现方式,也就是在问 Unicode 有几种编码方式?
Unicode 常用的编码方式有 UTF-8, UCS-2, UTF-16 三种,另外还有一种 UTF-32 虽然不太常用也需要提一下。
Unicode 的体系结构是什么样的?
Unicode 既然能够存储那么多的字符,肯定是有它的存储规则的,如果使用 16 进制存储,它的存储范围是多少到多少,是否都是直筒式的,从低到高排就可以了?也就是说 Unicode 的体系结构是怎么样的。
Unicode 当前定义其字符的存储范围是:0hex 到 10FFFFhex ,共分为 17 个区段,可以存储 1,114,112 个字符,这对当前 (137439) 来说远远足够了。
其中区段为 0hex 到 FFFFhex 称为 基本多文种平面 BMP (Basic Multilingual Plane),在这个平面中的字符表现形式是 U+ 后面跟 16 进制数。例如 X 字符的 unicode 是 U+0058。
而超出 BMP 范围的,也就是 10000hex – 10FFFFhex 这 16 个区段,需要用到 5 到 6 位来表示,如 U+E0001 和 U+10FFFD。
UTF-8 编码
UTF-8 是使用互联网上使用最广泛的 unicode 编码方式,目前已经占有整个互联网 92% 的份额。这里再强调下 UTF-8 只是 Unicode 的一种实现方式,UTF-8 是编码方式,而 Unicode 是字符集合
它是可变长的编码方式,长度从 1 个字节到 4 个字节不等。
它能够完全兼容 ASCII 码,我们知道 ASCII 码 是由 128 个字符组成的,而 Unicode 中的前 128 个字符和 ASCII 码都是一一对应的。
UCS-2 编码
UCS-2 只使用了两个字节(16 bit) 来表示字符,也就是说只能表示 65536 个字符,它只能表示 BMP 中的字符。
当前的 unicode 字符数量已远远超过了 UCS-2 的数量,因此 UCS-2 虽然还在被好多软件使用,但它已经过期了。
正因为 UCS-2 编码依然被许多软件使用,为了能够表示出 BMP 以外的平面内的字符,就产生了一种新的编码 UTF-16 编码。
UTF-16 编码
UTF-16 就是为了解决 UCS-2 编码的问题而生的,它扩展自 UCS-2
基本多文种平面中,与 UCS-2 编码完全一致,使用两个字节表示
U+010000 到 U+10FFFF 范围 使用 4 个字节表示
UTF-16 编码的市场份额和 UTF-8 比很小, 在web 页面中只占 0.01% 。而且主要在 windows 系统中使用, Unix/Linux 以及 MacOS 中很少使用。
UTF-32 编码
UTF-32 对 Unicode 中的每个字符都用 4 个字节来表示,占用的空间比其他编码要多的多,也正是这个原因,人们才用的很少。
小结
既然看到了这里,您一定对 unicode 有了一些认识吧,请再来回顾下 Unicode 的思维导图,加深下理解。
下面来总结下重点:
ASCII 码只能表示 128 个字符,只是针对美国英语而设计的, 为了表示其他语言的字符,于是就有了 Unicode
Unicode 只是一个字符集,里面收集了全世界绝大部分语言的字符。它有多种实现方式(编码方式),最常用的就是 UTF-8
UTF-8 编码是变长字节的,1 到 4 个字节不等,并且它能够完全兼容 ASCII 码
作者:ReyCG
来源:https://www.cnblogs.com/reycg-blog/p/10021658.html
▼原创系列推荐▼1.JavaScript 重温系列(22篇全)
2.ECMAScript 重温系列(10篇全)
3.JavaScript设计模式 重温系列(9篇全)
4.正则 / 框架 / 算法等 重温系列(16篇全)
你点的每个赞,我都认真当成了喜欢
【Web技术】295- 重新复习 Unicode 和 UTF-8的更多相关文章
- 深入分析Java Web技术内幕(修订版)
阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著 ISBN 978-7-121- ...
- HTML5 Dashboard – 那些让你激动的 Web 技术
HTML5 Dashboard 是一个 Mozilla 推出的项目,里面展示了最前沿的 HTML5,CSS3,JavaScript 技术.每一项技术都有简洁,在线演示以及详细的文档链接.这些技术将成为 ...
- HTML5 模拟现实物理效果,感受 Web 技术魅力
Ball Pool 是一个基于 HTML5 技术的实验,模拟现实物理效果,让你在 Web 中感受自然物体的运动.玩法介绍:可以随意拖动圆球.点击页面背景.晃动浏览器.双击页面背景或者按住鼠标左键,有不 ...
- Soundslice – 美妙乐谱!Web 技术高大上的应用
Web 技术的不断发展让我们能够开发各种好玩的功能.这里给大家分享一个使用 HTML5 技术实现的在线乐谱,可以播放的哦,也可以选择一个片段进行循环播放.赶紧来体验一下:) 您可能感兴趣的相关文章 1 ...
- 深入分析Java Web技术(1)
BS网络模型的基本过程: 当我们在浏览器中输入"www.google.com"的时候,首先会请求DNS服务器对域名进行解析成都应的IP地址,然后根据这个IP地址在互联网上找到谷歌的 ...
- Java Web技术总结(目录)
来源于:http://www.jianshu.com/p/539bdb7d6cfa Java Web技术经验总结(一) Java Web技术经验总结(二) Java Web技术经验总结(三) Java ...
- JavaScript的角色巨变和Web技术的发展
曾经JavaScript是职业程序员看不上眼的脚本语言,如今只有高级程序员才能驾驭它. JavaScript性质和地位的天翻地覆,正是Web技术飞速变化的印证. 最初职业程序员轻视JavaScript ...
- 用web技术开发出原生的App应用的体会(1)
本人是是个前端小白,学前端已经有半年的时间了,前几天开了个博客,希望记录自己学习历程的点滴. 今天要写的是关于用html,css,javascript等web技术开发原生的app应用. 总所周知,we ...
- cct,web技术
基本信息 全国计算机等级考试二级教程——Web程序设计(2016年版)作 者:教育部考试中心 编出 版 社:高等教育出版社出版时间:20115-12-1 ISBN:9787040442991版 ...
随机推荐
- nyoj 51-管闲事的小明(遍历,比较)
51-管闲事的小明 内存限制:64MB 时间限制:4000ms Special Judge: No accepted:9 submit:20 题目描述: 某校大门外长度为L的马路上有一排树,每两棵相邻 ...
- CSS(8)---通俗讲解定位(position)
CSS(8)---通俗讲解定位(position) CSS有三种基本的定位机制: 普通流.浮动.定位.前面两个之前已经讲过,详见博客: 1.CSS(5)---通俗讲解盒子模型 2.CSS(6)---通 ...
- 领扣(LeetCode)寻找峰值 个人题解
峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位 ...
- 函数指针和成员函数指针有什么不同,反汇编带看清成员函数指针的本尊(gcc@x64平台)
函数指针是什么,可能会答指向函数的指针. 成员函数指针是什么,答指向成员函数的指针. 成员函数指针和函数指针有什么不同? 虚函数指针和非虚成员函数指针有什么不同? 你真正了解成员函数指针了吗? 本篇带 ...
- MySQL通过自定义函数实现递归查询父级ID或者子级ID
背 景: 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度, 那么所有节点为根的树的深度均不会超过树的最大深度,则我们可以直接通过left join来实现. 但很多时候我们是无 ...
- 2019-9-19:渗透测试,HTML基础学习,html绘制表格
1,受理员业务统计表 效果图: 代码: <!DOCTYPE html><html><head> <title>表格1</title>< ...
- 【Luogu P3387】缩点模板(强连通分量Tarjan&拓扑排序)
Luogu P3387 强连通分量的定义如下: 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶 ...
- 【NHOI2018】跳伞登山赛
[题目描述] 某山区有高高低低的 n 个山峰,根据海拔高度的不同,这些山峰由低到高进行了 1 到 n 编号.有 m 条只能单向通行的羊肠小道连接这些山峰.现在,这里要举行一场跳伞登山赛,选手们伞降到某 ...
- 使用IDEA创建SpringMVC项目
作为一名从.NET转Java的小渣渣,之前都是听说Java配置复杂,今天算是见识到了.甚是怀念宇宙第一IDE VS和.NET高效的开发. 网上大多教程是基于Eclipse的,即使按照IDEA的教程做, ...
- ETL的两种架构——ETL架构和ELT架构优劣势对比
导读: 作为现代企业和组织机构的重要资源,信息是进行科学管理与决策分析的基础.ETL 则是把数据转换为信息.知识的关键步骤之一.在 AI 应用场景下,数据集成有哪些特点?随着 AI 应用场景越来越 ...