空字符结尾的多字节字符串
来自 cppreference.cn
空字符结尾的多字节字符串 (NTMBS),或 “多字节字符串”,是由非零字节序列后跟一个值为零的字节(终止空字符)组成的序列。
存储在字符串中的每个字符可能占用多个字节。用于表示多字节字符字符串中的字符的编码是特定于区域设置的:它可能是 UTF-8、GB18030、EUC-JP、Shift-JIS 等。例如,char 数组 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一个 NTMBS,它保存了 UTF-8 多字节编码的字符串 "你好":前三个字节编码字符 你,接下来的三个字节编码字符 好。 相同的字符串以 GB18030 编码是 char 数组 {'\xc4', '\xe3', '\xba', '\xc3', '\0'},其中两个字符中的每一个都编码为双字节序列。
在某些多字节编码中,任何给定的多字节字符序列都可能表示不同的字符,具体取决于先前的字节序列,这被称为 “移位序列”。 这种编码称为状态相关的:需要了解当前的移位状态才能解释每个字符。 只有当 NTMBS 在初始移位状态下开始和结束时才有效:如果使用了移位序列,则相应的取消移位序列必须在终止空字符之前出现。 这种编码的示例包括 BOCU-1 和 SCSU。
多字节字符字符串与 空字符结尾的字节字符串 (NTBS) 的布局兼容,也就是说,可以使用相同的工具存储、复制和检查,除了计算字符数之外。 如果正确的区域设置生效,I/O 函数也会处理多字节字符串。 多字节字符串可以使用以下依赖于区域设置的转换函数在宽字符串之间相互转换
目录 |
[编辑] 函数
多字节/宽字符转换 | |
定义于头文件
<stdlib.h> | |
返回下一个多字节字符中的字节数 (函数) | |
将下一个多字节字符转换为宽字符 (函数) | |
(C11) |
将宽字符转换为其多字节表示 (函数) |
(C11) |
将窄多字节字符字符串转换为宽字符串 (函数) |
(C11) |
将宽字符串转换为窄多字节字符字符串 (函数) |
定义于头文件
<wchar.h> | |
(C95) |
检查 mbstate_t 对象是否表示初始移位状态 (函数) |
(C95) |
如果可能,将单字节窄字符扩展为宽字符 (函数) |
(C95) |
如果可能,将宽字符缩小为单字节窄字符 (函数) |
(C95) |
返回给定状态的下一个多字节字符中的字节数 (函数) |
(C95) |
将给定状态的下一个多字节字符转换为宽字符 (函数) |
(C95)(C11) |
将给定状态的宽字符转换为其多字节表示 (函数) |
(C95)(C11) |
将给定状态的窄多字节字符字符串转换为宽字符串 (函数) |
(C95)(C11) |
将给定状态的宽字符串转换为窄多字节字符字符串 (函数) |
定义于头文件
<uchar.h> | |
(C23) |
将窄多字节字符转换为 UTF-8 编码 (函数) |
(C23) |
将 UTF-8 字符串转换为窄多字节编码 (函数) |
(C11) |
将窄多字节字符转换为 UTF-16 编码 (函数) |
(C11) |
将 UTF-16 字符转换为窄多字节编码 (函数) |
(C11) |
将窄多字节字符转换为 UTF-32 编码 (函数) |
(C11) |
将 UTF-32 字符转换为窄多字节编码 (函数) |
[编辑] 类型
定义于头文件
<uchar.h> | |
定义于头文件
<wchar.h> | |
(C95) |
迭代多字节字符字符串所需的转换状态信息 (类) |
定义于头文件
<uchar.h> | |
(C23) |
8 位字符类型 (类型定义) |
(C11) |
16 位字符类型 (类型定义) |
(C11) |
32 位字符类型 (类型定义) |
[编辑] 宏
定义于头文件
<limits.h> | |
MB_LEN_MAX |
多字节字符中的最大字节数,适用于任何受支持的区域设置 (宏常量) |
定义于头文件
<stdlib.h> | |
MB_CUR_MAX |
当前区域设置中多字节字符的最大字节数 (宏变量) |
[编辑] 参考文献
- C23 标准 (ISO/IEC 9899:2024)
- 7.10 整数类型的大小 <limits.h> (p: TBD)
- 7.22 通用实用工具 <stdlib.h> (p: TBD)
- 7.28 Unicode 实用工具 <uchar.h> (p: TBD)
- 7.29 扩展的多字节和宽字符实用工具 <wchar.h> (p: TBD)
- 7.31.12 通用实用工具 <stdlib.h> (p: TBD)
- 7.31.16 扩展的多字节和宽字符实用工具 <wchar.h> (p: TBD)
- K.3.6 通用实用工具 <stdlib.h> (p: TBD)
- K.3.9 扩展的多字节和宽字符实用工具 <wchar.h> (p: TBD)
- C17 标准 (ISO/IEC 9899:2018)
- 7.10 整数类型的大小 <limits.h> (p: TBD)
- 7.22 通用实用工具 <stdlib.h> (p: TBD)
- 7.28 Unicode 实用工具 <uchar.h> (p: TBD)
- 7.29 扩展的多字节和宽字符实用工具 <wchar.h> (p: TBD)
- 7.31.12 通用实用工具 <stdlib.h> (p: TBD)
- 7.31.16 扩展的多字节和宽字符实用工具 <wchar.h> (p: TBD)
- K.3.6 通用实用工具 <stdlib.h> (p: TBD)
- K.3.9 扩展的多字节和宽字符实用工具 <wchar.h> (p: TBD)
- C11 标准 (ISO/IEC 9899:2011)
- 7.10 整数类型的大小 <limits.h> (p: 222)
- 7.22 通用实用工具 <stdlib.h> (p: 340-360)
- 7.28 Unicode 实用工具 <uchar.h> (p: 398-401)
- 7.29 扩展的多字节和宽字符实用工具 <wchar.h> (p: 402-446)
- 7.31.12 通用实用工具 <stdlib.h> (p: 456)
- 7.31.16 扩展的多字节和宽字符实用工具 <wchar.h> (p: 456)
- K.3.6 通用实用工具 <stdlib.h> (p: 604-614)
- K.3.9 扩展的多字节和宽字符实用工具 <wchar.h> (p: 627-651)
- C99 标准 (ISO/IEC 9899:1999)
- 7.10 整数类型的大小 <limits.h> (p: 203)
- 7.20 通用实用工具 <stdlib.h> (p: 306-324)
- 7.24 扩展的多字节和宽字符实用工具 <wchar.h> (p: 348-392)
- 7.26.10 通用实用工具 <stdlib.h> (p: 402)
- 7.26.12 扩展的多字节和宽字符实用工具 <wchar.h> (p: 402)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 4.1.4 限制 <float.h> 和 <limits.h>
- 4.10 通用实用工具 <stdlib.h>
- 4.13.7 通用实用工具 <stdlib.h>
[编辑] 参见
C++ 文档 关于 空字符结尾的多字节字符串
|