以空字符结尾的多字节字符串
来自 cppreference.com
以空字符结尾的多字节字符串 (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) |
将 16 位宽字符转换为窄多字节字符串 (函数) |
(C++11) |
将窄多字节字符转换为 UTF-32 编码 (函数) |
(C++11) |
将 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 文档 关于 以空字符结尾的多字节字符串
|