空终止多字节字符串
空终止多字节字符串( null-terminated multibyte string, NTMBS ),或“多字节字符串”,是后随拥有零值的字节(空终止字符)的非零字节序列。
存储于该字符串中的每个字符可能占用多于一个字节。用于表示字符的编码是本地环境限定的:它可以是 UTF-8 、 GB18030 、 EUC-JP 、 Shift-JIS 等。例如,字符数组 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一个以UTF8编码包含 "你好" 的 NTMBS :首三个字节编码字符 "你" ,接下来三个字节编码字符 "好" 。编码于 GB18030 的相同字符串是字符数组 {'\xc4', '\xe3', '\xba', '\xc3', '\0'} ,其中二个字符各编码为双字节序列。
一些多字节编码中,任何给定的多字节字符序列可以根据之前的字节序列,称之为“迁移序列”,表示不同的字符。这种编码被称为状态依赖的:要求知晓当前迁移状态以转译每个字符。 NTMBS 仅若以初始迁移状态开始及结束才合法:若使用迁移序列,则对应的无迁移序列必须在空终止字符前存在。这种编码的例子是 7-bit JIS 、 BOCU-1 及 SCSU 。
多字节字符串与空终止字节字符串( NTBS )布局兼容,即能用相同的设施存储、复制并检验,除了计算字符数。若当前本地环境生效,则 I/O 函数亦处理多字节字符串。多字节字符串可用 std::codecvt 成员函数、 std::wstring_convert 或下列依赖本地环境的转换函数与宽字符串相互转换:
多字节/宽字符串转换
定义于头文件
<cstdlib> | |
返回下一个多字节字符中的字节数 (函数) | |
将下一个多字节字符转换成宽字符 (函数) | |
转换宽字符为其多字节表示 (函数) | |
转换窄多字节字符串为宽字符串 (函数) | |
转换宽字符串为窄多字节字符串 (函数) | |
定义于头文件
<cwchar> | |
检查 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 编码 (宏常量) |