空字符结尾多字节字符串
来自 cppreference.cn
空字符结尾多字节字符串 (NTMBS),或“多字节字符串”,是以空值字节(终止空字符)结尾的非零字节序列。
字符串中存储的每个字符可能占用多个字节。用于表示多字节字符字符串中字符的编码是特定于locale的:它可能是 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 仅在其开始和结束于初始移位状态时才有效:如果使用了移位序列,则相应的取消移位序列必须在终止空字符之前出现。此类编码的示例包括 7 位 JIS、BOCU-1 和 SCSU。
多字节字符串与空字符结尾字节字符串 (NTBS) 布局兼容,也就是说,可以使用相同的工具存储、复制和检查它们,除了计算字符数。如果正确的 locale 生效,I/O 函数也处理多字节字符串。多字节字符串可以使用 std::codecvt 成员函数、std::wstring_convert 或以下 locale 相关的转换函数在宽字符串和多字节字符串之间相互转换
内容 |
[编辑] 函数
多字节/宽字节字符转换 | |
定义于头文件
<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 locale 中的多字节字符中的最大字节数 (宏变量) |
定义于头文件
<cuchar> | |
__STDC_UTF_16__ (C++11) |
指示 mbrtoc16 和 c16rtomb 使用 UTF-16 编码 (宏常量) |
__STDC_UTF_32__ (C++11) |
指示 mbrtoc32 和 c32rtomb 使用 UTF-32 编码 (宏常量) |
[编辑] 参见
C 文档 关于 空字符结尾多字节字符串
|