71-通用字符名(UCN)
B.7.5 通用字符名(UCN)
多字节字符可以用在字符串中,但是不能用在标识符中。C99新增了通用字符名(UCN),允许用户在标识名中使用扩展字符集中的字符。系统扩展了转义序列的概念,允许编码ISO/IEC 10646标准中的字符。该标准由国际标准化组织(ISO)和国际电工技术委员会(IEC)共同制定,为大量的字符提供数值码。10646标准和统一码(Unicode)关系密切。
有两种形式的UCN序列。第1种形式是 \u hexquard ,其中 hexquard 是一个 4 位的十六进制数序列(如, \u00F6 )。第2种形式是 \U hexquardhexquard ,如 \U0000AC01 。因为十六进制每一位上的数对应4位, \u 形式可用于16位整数表示的编码, \U 形式可用于 32 位整数表示的编码。
如果系统实现了UCN,而且包含了扩展字符集中所需的字符,就可以在字符串、字符常量和标识符中使用UCN:
wchar_t value\u00F6\u00F8 = L'\u00f6';
统一码和ISO 10646
统一码为表示不同的字符集提供了一种解决方案,可以根据类型为大量字符和符号制定标准的编号系统。例如,ASCII码被合并为统一码的子集,因此美国拉丁字符(如A~Z)在这两个系统中的编码相同。但是,统一码还合并了其他拉丁字符(如,欧洲语言中使用的一些字符)和其他语言中的字符,包括希腊文、西里尔字母、希伯来文、切罗基文、阿拉伯文、泰文、孟加拉文和形意文字(如中文和日文)。到目前为止,统一码表示的符号超过了110000个,而且仍在发展中。欲了解更多细节,请查阅统一码联合站点:www.unicode.org。
统一码为每个字符分配一个数字,这个数字称为代码点(code point)。典型的统一码代码点类似:U-222B。U表示该字符是统一字符,222B是表示该字符的一个十六进制数,在这种情况下,表示积分号。
国际标准化组织(ISO)组建了一个团队开发ISO 10646和标准编码的多语言文本。ISO 10646团队和统一码团队从1991年开始合作,一直保持两个标准的相互协调。