字符集编码的发展与简介(四):字符集编码模型

其他章节:
字符集编码的发展与简介(一):ASCII码
字符集编码的发展与简介(二):ANSI
字符集编码的发展与简介(三):UNICODE
字符集编码的发展与简介(四):字符集编码模型



字符集编码模型

(1)抽象字符库 Abstract character repertoire (ACR)

抽象字符库 (ACR) 是要编码的字符的无序集合。在给定的标准中,该集合可能是封闭的(不能有新的字符添加到其中),或者可能是开放的,随着时间的推移可以添加新字符(但也对最终可能添加的字符总数有一些强加的限制)。例如,Unicode 有一个开放的曲目,为了使标准更具通用性,会定期添加该曲目。[13]

对字符是 “抽象的” 需要特别解释一下。首先,它们不是直接存在于计算机系统中的东西,甚至都不是现实世界中具体的物体。而是一个概念对象,就像对应于单词 “character” 中字母 “r” 的概念,而不是字母 “r” 本身。此外,字符也不一定对应于给定书写系统中的字素,例如,西班牙语字母 “ñ” 中的上方的波浪号可能被视为一个不同的字符,这种情况下,该西班牙字母 “ñ” 就需要用两个字符 “n” 和 “~” 来表示。最后,还应该注意的是,字符不一定是图形对象,例如:“零宽度空格”,该空格没有图形表示形式,而是一个控制换行的文本运行控制字符。[13]

(2)编码字符集 Coded character set (CCS)

编码字符集是从一组抽象字符库到一组唯一的数字指示符的映射。 数字指示符通常为整数(integers),在某些标准中则是一对的整数(pairs of integers)。 [13]

数字指示符称为代码点(codepoint) ,抽象字符与代码点的对应关系称为编码字符(encoded character)。需要提醒的是,这些代码点不绑定到计算机中的任何表示形式,代码点不是字节,它们只是整数(或整数对)。代码点的范围在编码标准中通常是有限的,这个有效的范围称为代码空间(codespace)。一套编码字符的集合称为编码字符集,也称为一个代码页(codepage)[13]

要注意的是,一些行业标准是在CCS级别运行的。它们标准化了一套编码字符集,并且为每个字符都指定了一个名称和属性,但它们没有标准化计算机中这些字符的编码表示形式。东亚地区使用的几种标准就是这种情况,例如 GB2312-80(简体中文)、CNS 11643-1992(台湾繁体中文)、JIS X 0208(日语)和KS X 1001(韩语)。这些标准都为每个字符分配了独一无二的代码点,但是没有明确每个代码点是怎样在计算机中表示的。想要将这些标准应用到计算机上,还依赖于其他单独的标准,也就是模型中的下一个级别:编码形式。

(3)字符编码形式 Character encoding form (CEF)

这个层面上,我们开始考虑计算机中的实际表示。字符编码形式指的是从CCS中的代码点到固定数据类型的值的序列的映射,这些值称为代码单元(code units)。原则上,代码单元可以是任何大小:8位、11位、或者其他任何值。编码单元最常见的大小是8位、16位和 32位。[13]

在这里需要解释一下,“代码页” 在某些非正式的场合中也指的是某个应用于特定编码字符集(CCS)的字符编码形式(CEF)。[13]

CCS 中的代码点与 CEF 中的代码单元不一定是一对一的。在许多情况下,一个代码点是映射到一个有着多个代码单元的序列上的,例如 ANSI 的 “双字节” 编码,一个代码单元为8位,但是通常需要两个代码单元才能表示一个代码点(也就是一个字符)。

每个字符也不一定会映射到长度一致的代码单元序列上。例如罗马字符 “s” 被编码为单字节 0x73,但汉字 “山” 被编码为两个字节的序列:0xA4 0x73。

简单来说,CEF 需要做的是:为每个代码点都映射到唯一的代码单元序列上[13]

有的字符集仅支持一种编码形式,例如一些西欧的常见字符集,单字节 8 位就可以表示完整的字符集,自然也就不需要其他的编码形式了。

有的编码形式也只用于一种字符集,例如 Big5 编码仅适用于 Big5 字符集,UTF-8 编码仅用于 Unicode 字符集。

另一方面,很多字符集是支持多种编码形式的,例如 GB 2312-80 字符集可以使用 GBK 编码形式、ISO/IEC 2022 编码形式或 EUC 编码形式进行存储。

此外,一些编码形式已经应用于多个字符集。例如,EUC 编码的变体对应于 GB 2312-80(简体中文)、CNS 11643-1992(台湾繁体中文)、JIS X 0208(日文)和其他几个字符集。

一个编码形式甚至可以同时采用多个字符集,ISO/IEC 2022 标准就是为此而制定的。在该标准下,每个字符集都对应了一个特定的转义序列。默认情况下,ISO/IEC 2022 数据使用 ASCII 字符集进行解释。当遇到各种转义序列中的任何一个时,将根据相应的字符集解释后续数据,直到遇到新的转义序列或恢复默认状态。ISO/IEC 2022 标准是为了提供一种可能支持所有字符集的单一编码。它使用许多机制来控制数据的解释方式,因此很复杂。

(4)字符编码方案 Character encoding scheme (CES)

随着计算机技术的发展,8 位字节在许多系统中具有特殊的意义。特别是,在最低级别,许多用于数据存储和传输的系统以 8 位字节的方式运行。当将 16 位或 32 位数据单元放入 8 位字节上下文中时,数据单元可以很容易地分成 8 位块,因为它们的大小是 8 位的整数倍。然而,这些数据块的排序顺序有两种逻辑可能性:小端序(低序字节优先)、大端序(高阶字节在前面)。[13]

因此对于 16 位和 32 位的编码形式,字符编码方案通过指定是使用大端序还是小端序来解决字节顺序中的歧义

除了 Unicode 之外,16 位和 32 位的编码形式并不常见。因此,除了 Unicode 之外,通常不会出现字节序列顺序的问题。


全文参考文献

[1] CSDN. 你真的懂Unicode和UTF-8是什么关系吗?来看看这个就彻底懂了![DB/OL]. (2018-11-19). https://blog.csdn.net/zhusongziye/article/details/84261211
[2] CSDN. Unicode和UTF-8的关系[DB/OL]. (2022-11-23). https://blog.csdn.net/song854601134/article/details/127994299
[3] 博客园. Unicode和UTF-8的关系[DB/OL]. (2019-05-12). https://www.cnblogs.com/tsingke/p/10853936.html
[4] 知乎. Unicode和utf8的关系是什么?[DB/OL]. (2022-10-30). https://www.zhihu.com/question/274104168/answer/2737298850
[5] 成都信息工程大学. 网页编码UTF-8,GBK,GB2312的区别[DB/OL]. (2015-10-17). http://jszx.cuit.edu.cn/NewsCont.asp?type=1009&id=20573
[6] 曹晖.字符集与字符编码标准[J].西北民族大学学报(自然科学版),2006,(03):36-42.
[7] CSDN. ANSI是什么编码?[DB/OL]. (2022-06-12). https://blog.csdn.net/weixin_38293850/article/details/125248400
[8] CSDN. ANSI和UNICODE编码区别[DB/OL]. (2022-08-20). https://blog.csdn.net/u010164190/article/details/126433688
[9] CSDN. ANSI是什么编码?[DB/OL]. (2020-08-07). https://blog.csdn.net/Liuqz2009/article/details/107861408
[10] JOEL SPOLSKY. The Absolute Minimum Every Software Developer Absolutely Positively Must Know About Unicode and Character Sets[DB/OL]. (2003-10-08). The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) – Joel on Software
[11] 腾讯云开发者社区. 编码、R与Windows(一) [DB/OL]. (2020-10-23). https://cloud.tencent.com/developer/article/1727834
[12] Computers & Writing Systems. Understanding Unicode [DB/OL]. (2001-06-13). http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter04a
[13] Computers & Writing Systems. Character set encoding basics [DB/OL]. (2001-06-13). https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter03
[14] 知乎. 字符集编码(一):Unicode之前 [DB/OL]. (2023-04-24). https://zhuanlan.zhihu.com/p/468843643
[15] 知乎. UTF-8到底是什么意思?uicode编码简介 [DB/OL]. (2020-05-03). https://zhuanlan.zhihu.com/p/137875615
[16] CSDN. Unicode编码详解(四):UTF-16编码[DB/OL]. (2022-02-12). https://blog.csdn.net/hyongilfmmm/article/details/112046816
[17] CSDN. ANSI、MBCS、UNICODE字符集[DB/OL]. (2020-05-23). https://blog.csdn.net/fenghaiyang198848/article/details/106301653
[18] Microsoft文档. 支持多字节字符集 (MBCS) [DB/OL]. (2023-06-16). https://learn.microsoft.com/zh-cn/cpp/text/support-for-multibyte-character-sets-mbcss?view=msvc-170
[19] Microsoft文档. Unicode 和多字节字符集 (MBCS) 支持 [DB/OL]. (2023-04-03). https://learn.microsoft.com/zh-cn/cpp/atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support?view=msvc-170
[20] CSDN. ANSI、MBCS、UNICODE字符集 [DB/OL]. (2020-05-23). https://blog.csdn.net/fenghaiyang198848/article/details/106301653
[21] Charles Petzold. Windows程序设计(第7版)[M]. 北京: 清华大学出版社, 2000.
[22] UNICODE官网. About the Unicode Consortium [DB/OL]. https://home.unicode.org/about-unicode/
[23] UNICODE官网. Unicode标准:技术介绍 [DB/OL]. (2019.08.23). https://www.unicode.org/standard/principles.html
[24] UNICODE官网. Unicode15.0.0 [DB/OL]. (2022.09.13). https://www.unicode.org/versions/Unicode15.0.0/
[25] CSDN. Unicode了解一下:码位分布[DB/OL]. (2018.04.21). https://blog.csdn.net/oyji1992/article/details/80030366
[26] Microsoft文档. 字符集 [DB/OL]. (2023-06-16). https://learn.microsoft.com/zh-cn/windows/win32/intl/character-sets
[27] 博客园. 汉字编码之GBK编码[DB/OL]. (2020-11-05). https://www.cnblogs.com/Malphite/p/13931511.html
[28] CSDN. 汉字编码之GBK编码(附完整码表)[DB/OL]. (2016-03-04). https://learn.microsoft.com/zh-cn/windows/win32/intl/character-sets
[29] Microsoft文档. SBCS 和 MBCS 数据类型 [DB/OL]. (2023-06-16). https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/sbcs-and-mbcs-data-types?view=msvc-170
[30] Microsoft文档. Unicode 和 MBCS [DB/OL]. (2023-06-16). https://learn.microsoft.com/zh-cn/cpp/text/unicode-and-mbcs?view=msvc-170

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值