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 中定义的通用字符名称构造表示基本源字符集之外的字符。 它允许标识,字符常量和字符串字面值中的通用字符名称。
为了与 C99 兼容, XL C/C++ 编译器支持通用字符名称作为 IBM 扩展名。在C++中,必须使用 -qlanglvl=ucs 选项进行编译,以支持通用字符名称。
| 通用字符名称 | 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 字符字面值。
| 语法 | 说明 |
|---|---|
| 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 " |