上期:
字符编码(二)-CSDN博客
Unicode 字符集
Unicode字符集是一个国际标准,旨在为世界上所有的书写系统和符号提供一个统一的编码方案。它不仅涵盖了现代语言中的字符,还包括了历史上的文字、数学符号、技术符号、表情符号等,几乎覆盖了人类历史上所有已知的字符。通过为每个字符分配一个唯一的编号(称为代码点或码位),Unicode确保了不同平台、程序和语言之间的互操作性。
Unicode官方网址
Unicode – The World Standard for Text and Emoji
代码图
Unicode 16.0 字符代码表
Unicode的发展背景
在Unicode出现之前,计算机行业存在着数百种不同的编码标准,每种编码只能涵盖有限数量的语言字符,并且这些编码之间可能存在冲突。例如,两个不同的编码可能使用相同的数字表示不同的字符,或者用不同的数字表示同一个字符。这种不一致性导致了数据交换时的问题,尤其是在跨国界或跨文化的环境中。
为了克服这些问题,Unicode联盟(The Unicode Consortium)成立,其目标是创建一个包含全球所有字符的单一编码标准。自1991年发布第一个版本以来,Unicode已经经历了多次更新,不断扩展以纳入更多的字符和支持更多的语言。
Unicode的基本概念
-
抽象字符:Unicode定义了一个抽象字符的概念,即字符本身与其任何特定的视觉表现形式无关。这意味着即使同一个字符在不同的字体中有不同的外观,它们仍然被认为是同一个字符。
-
代码点:每个抽象字符都被赋予了一个独一无二的标识符——代码点(Code Point)。代码点通常表示为
U+
后面跟着四位到六位的十六进制数,如大写字母A的代码点是U+0041
。 -
平面(Plane)与区块(Block):Unicode将代码点划分为多个平面,其中基本多语言平面(Basic Multilingual Plane, BMP)是最常用的,包含了从
U+0000
到U+FFFF
的65,536个位置。除此之外还有16个辅助平面,用于容纳更多的字符。每个平面又被细分为若干个区块,每个区块包含一组相关的字符。
Unicode的编码形式
虽然Unicode定义了一个庞大的字符集,但它并没有规定具体的字节表示方法。为了能够在实际的计算机系统中传输和存储这些字符,Unicode提供了几种不同的编码形式:
-
UTF-8:这是一种变长编码方式,可以使用1到4个字节来表示不同的字符。UTF-8的一个重要特点是它与ASCII兼容,对于ASCII范围内的字符(
U+0000
至U+007F
),UTF-8直接使用单字节表示,这使得它成为互联网上传输文本数据的事实标准。 -
UTF-16:该编码方式既可以是定长也可以是变长的。对于BMP内的字符,UTF-16使用两个字节表示;而对于超出BMP的字符,则需要四个字节(一对代理项)。UTF-16主要用于Windows操作系统和其他一些环境。
-
UTF-32:这是一种固定长度的编码方式,每个字符都使用四个字节表示。尽管简单直接,但由于占用空间较大,因此应用不如前两者广泛。
Unicode与其他编码的关系
随着Unicode标准的普及,越来越多的传统编码逐渐被取代。然而,在某些情况下,旧有的编码仍然会被使用,特别是在那些对性能敏感的应用场景下,或是处理历史数据时。例如,GBK是中国大陆地区常用的中文编码之一,它基于GB2312进行了扩展,以支持更多的汉字。尽管如此,Unicode因其广泛的适用性和良好的兼容性,已经成为现代软件开发不可或缺的一部分。