什么是 ISO/IE 10646 中的"character short name"?



C++11 2.3/2 说:

由通用字符名称 \UNNNNNNNN 指定的字符是 在 ISO/IEC 10646 中其字符短名称为 NNNNNNNN 的字符

所以我下载了ISO/IEC 10646,但我找不到"字符短名称"的定义。有人可以澄清一下这应该指的是什么吗?

我最初的目标是找出为什么在用\U指定代码点时需要8个十六进制数字,因为6位数字就足够了。 所以我也很想知道为什么 C++11 指定我们使用 \UNNNNNNNN 而不是 \UNNNNNN。

在 Unicode 字符代码图表中,每个字符都有一个全名和一个短名称。例如,字符 / 具有全名 SOLIDUS 和短名称 002F 。并非巧合的是,所有字符短名称都可以用十六进制表示。

至于为什么必须指定 8 位数字,我怀疑这是为了与可能使用更大/更多字符块的未来版本的 Unicode 标准向前兼容。

我冒昧地猜测我们上次被Unicode的人咬了:C++最初做了wchar_t,这样它就可以容纳每个可能的Unicode字符。为此,它需要至少容纳 16 位,因为 Unicode 最多使用 16 位。在一个流行的实现决定实际使用 16 位wchar_t类型后不久,发现 16 位实际上是不够的。上次我看 Unicode 使用了 20 位,但为什么要赌太短呢?不太可能广泛使用 24 位类型,如果您需要使用特定的代码点,则最像仅使用 16 位,即您可以使用 uNNNN .

2.3 [lex.charset] 第 2 段中的描述似乎表明通用字符名称是指码位。同时,通用字符名称用于指代字符简称。我不是Unicode的专家,但我认为代码点是这个意思。

相关内容

最新更新