字符编码发展史5 — UTF-16和UTF-32

上一篇《字符编码发展史4 — Unicode与UTF-8》我们讲解了Unicode字符集与UTF-8编码。本篇我们将继续讲解字符编码的第三个发展阶段中的UTF-16和UTF-32。

2.3. 第三个阶段 国际化

2.3.2. Unicode的编码方式

2.3.2.2. UTF-16

UTF-16也是一种变长编码,对于一个Unicode字符被编码成1至2个码元,每个码元为2个字节(16位)。UTF-16编码会有字节序的问题,所以根据大小端又分为大端UTF-16(UTF-16 BE)和小端UTF-16(UTF-16 LE)。

1. 基本平面(码点范围U+0000-U+FFFF)

在基本多语言平面内的码位UTF-16编码使用1个码元且其值与Unicode是相等的(不需要转换)。举例如下:

Unicode字符UTF-16(码元)UTF-16 LE(字节)UTF-16 BE(字节)
U+0041A0x00410x41 0x000x00 0x41
U+03A9Ω0x03A90xA9 0x030x03 0xA9
U+66530x66530x53 0x660x66 0x53
2. 辅助平面(码点范围U+10000-U+10FFFF)

辅助平面的码点在UTF-16中被编码为一对双字节(16位)的码元(即32位,4字节),称作代理对(surrogate pair),编号范围:0xD800~0xDFFF,也就是前文提到的代理区的范围。这也就是为什么基本多语言平面会保留一块代理区(0xD800~0xDFFF)的码点不定义任何字符的原因。

组成代理对的两个码元前一个称为前导代理(lead surrogates)范围为0xD800-0xDBFF,可表达1024(2^10)个码元;后一个称为后尾代理(trail surrogates)范围为0xDC00-0xDFFF,可表达1024(2^10)个码元。这样两个码元组合在一起就可以表达 2^20(2^10 * 2 ^ 10)个编码,正好和辅助平面的码点范围U+10000-U+10FFFF对应。

UTF-16辅助平面代理对与Unicode的对应关系如下表。

  • 第一列: 表示前导代理。
  • 第一行: 表示后尾代理。
  • 表格内容: 表示Unicode的码点编号。
\0xDC000xDC010xDFFF
0xD800U+10000U+10001U+103FF
0xD801U+10400U+10401U+107FF
0xDBFFU+10FC00U+10FC01U+10FFFF

举例如下

Unicode字符UTF-16(码元)UTF-16 LE(字节)UTF-16 BE(字节)
U+2A6A5𪚥0xD869 0xDEA50x69 0xD8 0xA5 0xDE0xD8 0x69 0xDE 0xA5
3. 优缺点
  • 优点:
    1. 绝大部分的文字都可以用两个字节编码,对于CJK文字是比较节省空间的;
    2. 文本处理比UTF-8方便得多。
  • 缺点:
    1. 存储和传输需要考虑字节序的问题;
    2. 不兼容ASCII(准确的说是半兼容,编码值是一样的,只是需要用两个字节来表示)。
2.3.2.3. UTF-32
1. UTF-32的编码规则

UTF-32是一种定长编码,使用1个32bit的码元,其值与Unicode编码值相等。举例如下:

Unicode字符UTF-32(码元)UTF-32 LE(字节)UTF-32 BE(字节)
U+0041A0x000000410x41 0x00 0x00 0x000x00 0x00 0x00 0x41
U+03A9Ω0x000003A90xA9 0x03 0x00 0x000x00 0x00 0x03 0xA9
U+66530x000066530x53 0x66 0x00 0x000x00 0x00 0x66 0x53
U+2A6A5𪚥0x0002A6A50xA5 0xA6 0x02 0x000x00 0x02 0xA6 0xA5

UTF-32同样有大小端的问题。

2. 优缺点
  • 优点:是编码定长容易进行文本处理。
  • 缺点:是浪费存储空间及存在字节序的问题。
2.3.2.4. UCS-2 与 UCS-4

前文提到:历史上存在两个独立的尝试创立单一字符集的组织,即 国际标准化组织(ISO)和统一码联盟。统一码联盟除了收录字符集外,还制定过两套字符编码方案:UCS2和UCS4。

1. UCS-2

UCS-2是一种定长编码,编码范围为0x0000-0xFFFF,在基本多语言平面内与UTF-16是等价。UCS2没有类似于UTF-16中代理对的概念,所以对于0xD869 0xDEA5会识别成两个字符。所以它只能表示基本平面的字符,不能表示全部的Unicode字符。UCS2后来被UTF-16替代,现在基本已经被废弃了。

2. UCS-4

UCS-4的编码方式与UTF-32几乎一样,后来两个组织统一标准后,就变成了UTF-32。不过ISO组织规定Unicode的编码空间会限定在0x000000~0x10FFFF之间,而UCS4的编码范围能到0~0xFFFFFFFF。因此也可以认为:UTF-32 是 UCS-4 的一个子集。


未完待续…… 欲知后事如何,且看下回分解。

下回预告:字符编码发展史6 — BOM字节序标记。

历史文章推荐:

字符编码发展史4 — Unicode与UTF-8

字符编码发展史3 — GB2312/Big5/GBK/GB18030

字符编码发展史2 — ISO-8859-N

字符编码发展史1 — ASCII和EASCII


大家好,我是陌尘。

IT从业10年+, 北漂过也深漂过,目前暂定居于杭州,未来不知还会飘向何方。

搞了8年C++,也干过2年前端;用Python写过书,也玩过一点PHP,未来还会折腾更多东西,不死不休。

感谢大家的关注,期待与你一起成长。



【SunLogging】
扫码二维码,关注微信公众号,精彩内容

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

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

相关文章

第Y2周:训练自己的数据集

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 在上一次体验yolov5s的为基础上,这次将训练自己的数据集。 在YOLO目标检测算法中常用的三种标签格式:voc(xml)、coco(json)和yolo(txt…

【多线程】详解 CAS 机制

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. CAS 是什么1.1 CAS 具体步骤1.2 CAS 伪代码 2. CAS 的应用2.1 实现原子类2.1.1 AtomInteger 类2.1.2 伪代…

Rspamd:开源垃圾邮件过滤系统

Rspamd 是一个开源垃圾邮件过滤和电子邮件处理框架,旨在根据各种规则评估消息,包括正则表达式、统计分析以及与 URL 黑名单等自定义服务的集成。 系统会分析每封邮件并做出判定,MTA可据此采取进一步行动,例如拒绝邮件或添加垃圾邮…

低照度图像增强网络——EnlightenGAN

系列文章目录 GAN生成对抗网络介绍https://blog.csdn.net/m0_58941767/article/details/142704354?spm1001.2014.3001.5501 循环生成对抗网络——CycleGANhttps://blog.csdn.net/m0_58941767/article/details/142704671?spm1001.2014.3001.5501 目录 系列文章目录 前言 …

SSM社区慢性病管理系统—计算机毕业设计源码37572

摘 要 社区慢性病管理是社区卫生服务的主要内容,发展社区卫生服务是提供基本卫生服务、满足人民群众日益增长的卫生服务需求,也是提高人民健康水平的重要保障。为迎接慢性病防治的挑战我国进行了社区卫生服务改革,但由于社区卫生存在的诸多问…

OJ在线评测系统 微服务 OpenFeign调整后端下 nacos注册中心配置 不给前端调用的代码 全局引入负载均衡器

OpenFeign内部调用二 4.修改各业务服务的调用代码为feignClient 开启nacos注册 把Client变成bean 该服务仅内部调用,不是给前端的 将某个服务标记为“内部调用”的目的主要有以下几个方面: 安全性: 内部API通常不对外部用户公开,这样可以防止…

【CF2021E】Digital Village(All Version)

题目 给你一张 n n n 个点 m m m 条边的无向图,有 p p p 个关键点。你需要选择 k k k 个点染黑,使得这 p p p 个关键点到这 k k k 个黑点的代价和最小。定义代价为两点之间边权最大的边的最小值。 你需要求出 k 1,2,…,n 的所有答案 E1 n,m,p&l…

fiddler抓包20_弱网模拟

课程大纲 ① 打开CustomRules.js文件:Fiddler快捷键“CtrlR”(或鼠标点击,菜单栏 - Rules - Customize Rules)。 ② 设置速率:“CtrlF”,搜索 “m_SimulateModem”,定位至函数。在函数里设置上传、下载速率&#xff0c…

乔斯编程——P3283 通信救援

说明 众所周知,在同一平面内到定点的距离等于定长的点的集合叫做圆。这个定点叫做圆的圆心,定长即圆的半径。 同时用圆心的坐标和圆的半径,就可以确定圆在平面内的位置, 在本题当中,我们根据圆在平面覆盖的区域来描述…

全面解析大型模型Agent智能体原理及实践案例

1 什么是大模型 Agent ? 大模型 Agent,作为一种人工智能体,是具备环境感知能力、自主理解、决策制定及执行行动能力的智能实体。简而言之,它是构建于大模型之上的计算机程序,能够模拟独立思考过程,灵活调…

动态规划10:174. 地下城游戏

动态规划解题步骤: 1.确定状态表示:dp[i]是什么 2.确定状态转移方程:dp[i]等于什么 3.初始化:确保状态转移方程不越界 4.确定填表顺序:根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接:174.…

【FPGA】面试八股

1.FPGA的底层资源有哪些 (1)可编程的逻辑资源 可编程的逻辑单元由查找表(LUT),数据选择器(MUX),进位链(Carry Chain)和触发器(Flip-Flop) (2&…

毕业设计——物联网设备管理系统后台原型设计

作品详情 主要功能: 通过构建数字化综合体,利用物联网技术、设备监控技术采集生产线设备等物对象的实时数据,加强信息汇聚管理和服务,多系统维度、多层次的清楚地掌握设施各系统的状态,提高厂房服务的可控性、安全性&…

算法剖析:双指针

文章目录 双指针算法一、 移动零1. 题目2. 算法思想3. 代码实现 二、 复写零1. 题目2. 算法思想3. 代码实现 三、 快乐数1. 题目2. 算法思想3. 代码实现 四、 盛水最多的容器1. 题目2. 算法思想3. 代码实现 五、有效三角形的个数1. 题目2. 算法思想3. 代码实现 六、 和为 s 的两…

出国必备神器!这5款中英翻译工具让你秒变外语达人

在这个全球化的时代,中英互译已然成为我们日常生活和工作中不可或缺的一环。面对众多的翻译工具,如何选择一款既高效又人性化的翻译助手呢?今天,就让我为大家揭秘几款热门的中英互译工具,并分享我的使用感受。 一、福昕…

中广核CGN25届校招网申SHL测评题库、面试流程、招聘对象,内附人才测评认知能力真题

​中国广核集团校园招聘在线测评攻略🚀 🎓 校园招聘对象 2024届、2025届海内外全日制应届毕业生,大专、本科、硕士、博士,广核集团等你来! 📈 招聘流程 投递简历 简历筛选 在线测评(重点来啦…

用java编写飞机大战

游戏界面使用JFrame和JPanel构建。背景图通过BG类绘制。英雄机和敌机在界面上显示并移动。子弹从英雄机发射并在屏幕上移动。游戏有四种状态:READY、RUNNING、PAUSE、GAMEOVER。状态通过鼠标点击进行切换:点击开始游戏(从READY变为RUNNING&am…

详解Redis分布式锁在SpringBoot的@Async方法中没锁住的坑

背景 Redis分布式锁很有用处,在秒杀、抢购、订单、限流特别是一些用到异步分布式并行处理任务时频繁的用到,可以说它是一个BS架构的应用中最高频使用的技术之一。 但是我们经常会碰到这样的一个问题,那就是我们都按照标准做了但有时运行着、…

JavaEE之多线程进阶-面试问题

一.常见的锁策略 锁策略不是指某一个具体的锁,所有的锁都可以往这些锁策略中套 1.悲观锁与乐观锁 预测所冲突的概率是否高,悲观锁为预测锁冲突的概率较高,乐观锁为预测锁冲突的概率更低。 2.重量级锁和轻量级锁 从加锁的开销角度判断&am…

【Docker】03-自制镜像

1. 自制镜像 2. Dockerfile # 基础镜像 FROM openjdk:11.0-jre-buster # 设定时区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 拷贝jar包 COPY docker-demo.jar /app.jar # 入口 ENTRYPOINT ["ja…