空终止多字节字符串

来自cppreference.com
< cpp‎ | string

空终止多字节字符串( 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 编码
(宏常量)

参阅