C ++ 11 2.3 / 2说:
通用字符名称\ UNNNNNNNN指定的字符是 ISO / IEC 10646中字符短名称为NNNNNNNN
的字符
所以我下载了ISO/IEC 10646,但我找不到“字符短名称”的定义。有人可以澄清这应该指的是什么吗?
我最初的目标是找出为什么在用\ U指定代码点时需要8位十六进制数字,因为六位数总是足够的。所以我也有兴趣知道为什么C ++ 11指定我们使用\ UNNNNNNNN而不是\ UNNNNNN。
答案 0 :(得分:6)
在Unicode character code charts中,每个角色都有一个全名和一个短名称。例如,字符/
的全名为SOLIDUS
,短名称为002F
。并非巧合的是,所有字符短名称都以十六进制表示。
至于为什么必须指定8位数字,我怀疑这是为了与可能使用更大/更多字符块的Unicode标准的未来版本的向前兼容性。
答案 1 :(得分:1)
我冒昧地猜测我们上次被Unicode人员咬了一下:C ++最初使wchar_t
这样可以保存每个可能的Unicode字符。为此,它需要保持至少16位,因为Unicode最多使用16位。在一个流行的实现决定实际使用16位wchar_t
类型后不久,发现16位实际上是不够的。上次我看起来使用了20位的Unicode,但为什么赌博再次过于短暂? 24位类型不太可能被广泛使用,如果你需要使用特定的代码点,那么最好只使用16位,即你可以使用\uNNNN
。
2.3 [lex.charset]第2段中的描述似乎表明通用字符名称是指代码点。同时,universal-character-name用于表示字符短名称。我不是Unicode的专家,但我认为代码点是指。