当前位置: 首页 > news >正文

一文读懂字符与编码

整内容也可以在公众号「非专业程序员Ping」查看

一、字符/Character

对用户可见的“一个字符”,通常是我们在屏幕上看到的一个字母、数字、emoji 或组合字符。

比如:a、é、👨‍👩‍👧‍👦

二、字符编码标准/字符集

字符编码标准定义的是如何将字符映射到唯一编码,常见的字符编码标准比如ASCII、Unicode、GBK等

2.1 ASCII

ASCII(7位)定义了 128 个字符的唯一编码,包括数字0到9、小写字母a到z、大写字母A到Z以及常用标点符号等。

2.2 Unicode

Unicode又叫万国码,目标是为所有字符定义唯一编码(Code Point)。为了解决ASCII/GBK不能定义全部字符的问题。

比如:

a -> U+0061

👨 -> U+1F468

注意:

Unicode只负责分配码位(Code Point),并不决定具体的存储形式。

Unicode的前 128 个码点与ASCII相同。

2.2.1 Code Point

Code Point也叫码位,Unicode中为每个字符分配的唯一编码。

一个字符可以对应一个或多个Code Point,比如:

a:U+0061,对应 1 个Code Point

👨‍👩‍👧‍👦:U+1F468 (👨) + U+200D (ZWJ) + U+1F469 (👩) + U+200D (ZWJ) + U+1F467 (👧) + U+200D (ZWJ) + U+1F466 (👦)对应 7 个Code Point

é:U+00E9或U+0065 + U+0301

备注:

在Unicode中,é实际上有两种表示方式:

单一字符表示法:即直接使用U+00E9这个单独的Unicode码位表示é。

组合字符表示法:使用U+0065(字母e)和U+0301(重音符号)两个Unicode码位来表示一个é字符。

为什么会有这两种表示法?

历史原因:Unicode设计时考虑到了不同语言的需求,许多语言(如法语、西班牙语等)使用带有重音符号的字符,因此,Unicode同时支持这两种表示方式。

兼容性:一些旧的系统或字体可能只支持分解字符表示法,因此,Unicode也保留了这种组合字符的方式,以提高兼容性。

2.2.2 Code Unit

Code Unit也叫码元(代码单元),表示计算机中实际存储Unicode的基本单位,取决于编码方式。

比如:

UTF-8: Code Unit是 1 字节(8 Bit);比如:a在UTF-8编码下占 1 个字节,表示为0x61。

UTF-16: Code Unit是 2 字节(16 Bit);比如:a在UTF-16编码下占 2 个字节,表示为0x0061。

UTF-32: Code Unit是 4 字节(32 Bit);比如:a在UTF-32编码下占 4 个字节,表示为0x00000061。

三、字符编码方式

字符编码方式决定了字符如何存储、传输和解码;常见的编码方式有:UTF-8、UTF-16、UTF-32等

UTF-8:可变长度,用 1 到 4 个字节来存储 Unicode 字符;为了节省存储资源。

UTF-16:可变长度,用 2 或 4 个字节存储字符。

UTF-32:固定长度,每个字符始终使用 4 字节存储。

比如:

é的Code Point是:U+0065 + U+0301

当以UTF-32方式编码时,每个Code Point未超过4字节,所以表示为:0x00000065,0x00000301

当以UTF-16方式编码时,每个Code Point未超过2字节,所以表示为:0x0065,0x0301

当以UTF-8方式编码时,0x0301值超过了128,需要按UTF-8格式拆分为0xCC,0x81,所以表示为:0x65,0xCC,0x81

Q:UTF-8编码为什么是按128做比较,按理说1字节(0xFF)表示的最大值是255?

A:有两个原因:一是为了与ASCII兼容,ASCII只支持了128个字符编码,在UTF-8编码中,前128位与ASCII编码相同;二是UTF-8编码中,会将第一个字节的高位部分用来标识这个字符的编码长度,具体为:

0xxxxxxx:表示 1 字节字符(ASCII 范围)

110xxxxx:表示 2 字节字符

1110xxxx:表示 3 字节字符

11110xxx:表示 4 字节字符

http://www.jsqmd.com/news/119736/

相关文章:

  • 【专家亲授】Open-AutoGLM与SoapUI功能整合避坑指南:从冲突到协同的3步跃迁
  • 听完这场AI产品大会,我觉得如果不赚钱,所谓的提效真的毫无意义。
  • Open-AutoGLM能否彻底取代SoapUI?基于12个真实场景的协同能力压测结果公布
  • 示例Cone2,熟悉观察者模式,在Qt窗口中详解复现对应的Demo
  • 2025年伸缩悬臂货架哪家强?十大口碑厂家深度解析,伸缩悬臂货架/重型仓储货架/伸缩货架/抽拉式重型货架伸缩悬臂货架源头厂家有哪些 - 品牌推荐师
  • 当像素遇上混沌:MATLAB图像加密的奇幻漂流
  • 2025年度优质调节阀批发厂家综合排名揭晓,特种调节阀/精小型调节阀/调节阀/高性能调节阀/气动高温调节阀/美标调节阀调节阀生产商怎么选择 - 品牌推荐师
  • 《PHP POP 链构造(下):实战与利用》
  • CSS布局小技巧
  • day29打卡
  • 【权威对比】Open-AutoGLM与Parasoft SOAtest集成能力评测:数据背后的真相
  • 【权威对比】Open-AutoGLM与Parasoft SOAtest集成能力评测:数据背后的真相
  • cesium126,230911,Ce for Ue WMTS的编译流程:但 Cesium for Unreal 2.3.0已经实现了WMTS
  • 高可靠电子产品设计的IC选用和PCB设计
  • Word如何实现电子版手写签名?
  • 2025年行业内优质的制冷设备直销厂家排行,闭式冷却塔/玻璃钢冷却塔/冷却塔/制冷设备/工业冷却塔/冷却水塔制冷设备定制厂家怎么选 - 品牌推荐师
  • 真空包装袋选购指南:十大口碑厂家深度解析,市场优质的真空包装袋品牌关键技术和产品信息全方位测评 - 品牌推荐师
  • Thinkphp和Laravel党员素质能力提升管理系统vue
  • 《Docker Swarm实战:从入门到企业级生产部署》大纲【20251221】001篇
  • 【原创实践】Docker 镜像批量导出镜像与导入镜像
  • 监控指标与容量预警——延迟、命中率、慢查询与内存碎片的解读方法
  • 8个降AI率工具,MBA高效写作利器
  • 12.21
  • 移动端体验差?兰亭妙微用户体验设计公司教你 6 招解锁高效界面设计
  • - 标题: 基于matlab的热红外图像温度检测 - 关键词:matlab GUI界面 高斯噪...
  • 阿玛特拉斯
  • 第 481 场周赛Q1——100942. 整数的镜像距离
  • 2025年CNC数控机床定制服务商综合实力排行,自动化数控机床/医疗器械数控机床/牙科配件数控车床/级柱数控机床CNC数控机床品牌找哪家 - 品牌推荐师
  • Thinkphp和Laravel婚庆服务网站的设计与实现vue
  • Thinkphp和Laravel宠屋”宠物交易商城购物网站的设计与实现-vue