空终止多字节字符串
来自 cppreference.cn
以空字符结尾的多字节字符串(NTMBS),或称“多字节字符串”,是由非零字节序列后跟一个值为零的字节(终止空字符)组成。
字符串中存储的每个字符可能占用多个字节。用于表示多字节字符串中字符的编码是与区域设置相关的:它可以是 UTF-8、GB18030、EUC-JP、Shift-JIS 等。例如,字符数组 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一个 NTMBS,在 UTF-8 多字节编码中保存着字符串 "你好":前三个字节编码字符 你,后三个字节编码字符 好。在 GB18030 中编码的相同字符串是字符数组 {'\xc4', '\xe3', '\xba', '\xc3', '\0'},其中两个字符都编码为两字节序列。
在某些多字节编码中,任何给定的多字节字符序列都可以根据之前的字节序列(称为“移位序列”)表示不同的字符。这种编码被称为状态依赖型:解释每个字符需要了解当前的移位状态。NTMBS 仅在其以初始移位状态开始和结束时才有效:如果使用了移位序列,则在终止空字符之前必须存在相应的非移位序列。此类编码的示例包括 7 位 JIS、BOCU-1 和 SCSU。
多字节字符串与以空字符结尾的字节字符串(NTBS)是布局兼容的,也就是说,可以使用相同的设施进行存储、复制和检查,只是计算字符数除外。如果使用了正确的区域设置,I/O 函数也能处理多字节字符串。多字节字符串可以使用 std::codecvt 成员函数、std::wstring_convert 或以下与区域设置相关的转换函数在宽字符串之间进行转换:
目录 |
[编辑] 函数
多字节/宽字符转换 | |
定义于头文件
<cstdlib> | |
返回下一个多字节字符的字节数 (函数) | |
将下一个多字节字符转换为宽字符 (函数) | |
将宽字符转换为其多字节表示 (函数) | |
将窄多字节字符字符串转换为宽字符串 (函数) | |
将宽字符串转换为窄多字节字符字符串 (函数) | |
在头文件
<cwchar> 中定义 | |
返回下一个多字节字符的字节数,给定状态 (函数) | |
检查 std::mbstate_t 对象是否表示初始移位状态 (函数) | |
如果可能,将单字节窄字符加宽为宽字符 (函数) | |
如果可能,将宽字符缩小为单字节窄字符 (函数) | |
将下一个多字节字符转换为宽字符,给定状态 (函数) | |
将宽字符转换为其多字节表示,给定状态 (函数) | |
将窄多字节字符字符串转换为宽字符串,给定状态 (函数) | |
将宽字符串转换为窄多字节字符字符串,给定状态 (函数) | |
定义于头文件
<cuchar> | |
(C++20) |
将窄多字节字符转换为 UTF-8 编码 (函数) |
(C++20) |
将 UTF-8 字符串转换为窄多字节编码 (函数) |
(C++11) |
将窄多字节字符转换为 UTF-16 编码 (函数) |
(C++11) |
将 UTF-16 字符转换为窄多字节编码 (函数) |
(C++11) |
将窄多字节字符转换为 UTF-32 编码 (函数) |
(C++11) |
将 UTF-32 字符转换为窄多字节编码 (函数) |
[编辑] 类型
在头文件
<cwchar> 中定义 | |
迭代多字节字符串所需的转换状态信息 (类) |
[编辑] 宏
在头文件
<climits> 中定义 | |
MB_LEN_MAX |
多字节字符中的最大字节数 (宏常量) |
定义于头文件
<cstdlib> | |
MB_CUR_MAX |
当前 C 语言环境多字节字符中的最大字节数 (宏变量) |
定义于头文件
<cuchar> | |
__STDC_UTF_16__ (C++11) |
表示 mbrtoc16 和 c16rtomb 使用 UTF-16 编码 (宏常量) |
__STDC_UTF_32__ (C++11) |
表示 mbrtoc32 和 c32rtomb 使用 UTF-32 编码 (宏常量) |
[编辑] 另请参阅
C 文档 用于 以空字符结尾的多字节字符串
|