Unicode 标准

Unicode 标准 是对书面字符和文本的编码方案的规范。 它是一个通用标准,能够对多语种文本进行一致编码,并允许文本数据在国际上进行无冲突的交换。 适用于 C 和 C++ 的 ISO 标准引用 Information Technology-Programming Languages-Universal Multiple-Octet 编码字符集 (UCS) , ISO/IEC 10646:2003。 (ISO 使用术语 八位元 来引用字节。) ISO/IEC 10646 标准在编码形式的数量上比 Unicode 标准更具限制性: 符合 ISO/IEC 10646 的字符集也符合 Unicode 标准。

Unicode 标准为每个字符指定唯一的数字值和名称,并为数字值的位表示定义三种编码格式。 名称/值对为字符创建身份。 表示字符的十六进制值称为 代码点。 该规范还描述了整体字符属性,例如每个字符的大小写,方向性,字母属性和其他语义信息。 Unicode 标准以 ASCII 为模型,处理字母字符,表意字符和符号,并允许在保留代码点范围内实现定义的字符代码。 根据 Unicode 标准,该标准的编码方案因此具有足够的灵活性,可以处理所有已知的字符编码要求,包括覆盖所有世界历史脚本。

C99 允许 ISO/IEC 10646 中定义的通用字符名称构造表示基本源字符集之外的字符。 它允许标识,字符常量和字符串字面值中的通用字符名称。 仅限 C + +为了与 C99 兼容, XL C/C++ 编译器支持通用字符名称作为 IBM 扩展名。在C++中,必须使用 -qlanglvl=ucs 选项进行编译,以支持通用字符名称。仅限 C + +

下表显示通用通用字符名称构造及其与 ISO/IEC 10646 短名称的对应方式。
通用字符名称 ISO/IEC 10646 短名称
其中 N 是十六进制数字  
\UNNNNNNNN NNNNNNNN
\uNNNN 0000NNNN

C99 和 C++ 不允许表示基本字符集 (基本源代码集) 中的字符的十六进制值以及 ISO/IEC 10646 为控制字符保留的代码点。

还不允许使用以下字符:
  • 短标识小于 00A0的任何字符。 异常为 0024 ($) , 0040 (@) 或 0060 (')。
  • 其短标识在代码点范围 D800 到 DFFF (含) 之间的任何字符。

UTF 文字 (IBM 扩展)

ISO C 和 ISO C++ 委员会 已核准 u 字面值U 字面值 的实现,以分别支持 Unicode UTF-16 和 UTF-32 字符字面值。

下表显示了 UTF 字面值的语法。
表 1. UTF 文字
语法 说明
u "character" 表示 UTF-16 字符。
u "character-sequence" 表示 UTF-16 字符的数组。
U "character" 表示 UTF-32 字符。
U "character-sequence" 表示 UTF-32 字符的数组。
U 字面值的字符串并置
U 字面值和 U 字面值遵循与宽字符字面值相同的并置规则: 如果存在普通字符串,那么会将其加宽。 下面显示了允许的组合。 所有其他组合都无效。
合并 结果
u "a" u "b" U "ab"
u "a" "b" U "ab"
"a" u "b" U "ab"
   
U"a "U"b" U"ab "
U"a "" b " U"ab "
"a" U"b " U"ab "
允许多个并置,并以递归方式应用这些规则。