我的编程空间,编程开发者的网络收藏夹
学习永远不晚

你真的了解 Unicode 和 UTF-

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

你真的了解 Unicode 和 UTF-

目录

  • 引言
  • ASCII 码
    • 什么是 ASCII 码?
    • ASCII 码都包含哪些字符?
    • ASCII 码的局限在哪里?
  • Unicode
    • 什么是 Unicode ?
    • Unicode 的实现方式有几种?
    • Unicode 的体系结构是什么样的?
    • UTF-8 编码
    • UCS-2 编码
    • UTF-16 编码
    • UTF-32 编码
  • 小结
  • 参考文档

一直以来总是对 unicode, UTF-8 等编码知识懵懵懂懂的,尤其是在做项目过程中只要涉及到几个编码之间的转换,都得到网上搜索一番,根据别人的经验照葫芦画瓢,才能解决问题,但是私底下却完全不懂在做什么。

我再也不愿意重复这种状态了,于是就花了一个上午的时间,将这些知识整理了一遍。如果您觉得我的总结有疑问或者错误的地方,欢迎讨论交流,批评指正。

正题之前,先引入我总结的 Unicode 思维导图来预热下:

Unicode 思维导图

要了解 Unicode, 先要从 ASCII 码说起。

什么是 ASCII 码?

ASCII 码(American Standard Code for Information Interchange)称为美国标准信息交换码。它是基于拉丁字母的一套电脑编码系统。它定义了一个用于代表常见字符的字典。

ASCII 码都包含哪些字符?

包括 "A-Z"(大小写都包含),数据"0-9" 以及一些常见的符号,要完整查看整个 ASCII 码对应关系,可参考这里

ASCII 码的局限在哪里?

ASCII 当初只是为美国英语而设计的,只能显示 128 个编码,对其他的语言无能为力。要想显示其他语言的编码,还是要使用 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+E0001U+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+010000U+10FFFF 范围 使用 4 个字节表示

UTF-16 编码的市场份额和 UTF-8 比很小, 在web 页面中只占 0.01% 。而且主要在 windows 系统中使用, Unix/Linux 以及 MacOS 中很少使用。

UTF-32 编码

UTF-32 对 Unicode 中的每个字符都用 4 个字节来表示,占用的空间比其他编码要多的多,也正是这个原因,人们才用的很少。

既然看到了这里,您一定对 unicode 有了一些认识吧,请再来回顾下 Unicode 的思维导图,加深下理解。
Unicode 思维导图

下面来总结下重点:

  1. ASCII 码只能表示 128 个字符,只是针对美国英语而设计的, 为了表示其他语言的字符,于是就有了 Unicode
  2. Unicode 只是一个字符集,里面收集了全世界绝大部分语言的字符。它有多种实现方式(编码方式),最常用的就是 UTF-8
  3. UTF-8 编码是变长字节的,1 到 4 个字节不等,并且它能够完全兼容 ASCII 码
  1. 维基百科 Unicode

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

你真的了解 Unicode 和 UTF-

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

你真的了解 Unicode 和 UTF-

目录 引言 ASCII 码 什么是 ASCII 码? ASCII 码都包含哪些字符? ASCII 码的局限在哪里?
2023-01-30

Unicode、UTF-8和ISO8859-1区别解析

这篇文章主要介绍了Unicode、UTF-8和ISO8859-1到底有什么区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-28

Unicode和UTF-8编码的知识点有哪些

今天小编给大家分享一下Unicode和UTF-8编码的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。ASCII
2023-06-27

前端 let、const和var你真的了解么?

1.var 关键字要定义变量,可以使用 var 操作符(注意 var 是一个关键字),后跟变量名(即标识符,如前所述):varmessage;这行
2022-06-01

关于Java Object你真的了解了吗

导读: 在平时的coding中hashCode()和equals()的使用的场景有哪些?clone深复制怎么实现?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有没有跟我
2023-05-31

内建质量,你真的了解么?

内建质量定义     内建质量作用在开发过程中,要求软件生命周期之间参与的各个角色都需要实时的对软件的质量负责。确保软件在交付到下一环节前已经有了基础的质量保证。其核心目的就是减少因为质量问题导致的返工,而浪费大量人力成本。 1.敏捷中的内建质量 内建质量是规
内建质量,你真的了解么?
2019-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录