以空字符结尾的多字节字符串
来自 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 从初始移位状态开始并以初始移位状态结束时才有效:如果使用了移位序列,则相应的移位取消序列必须在终止空字符之前出现。这种编码的例子包括 BOCU-1 和 SCSU.
多字节字符字符串与 以空字符结尾的字节字符串 (NTBS) 在布局上兼容,也就是说,可以使用相同的工具存储、复制和检查,除了计算字符数量。如果生效了正确的语言环境,I/O 函数也会处理多字节字符串。可以使用以下特定于语言环境的转换函数将多字节字符串转换为宽字符串,反之亦然。
内容 |
[编辑] 多字节/宽字符转换
定义在头文件
<stdlib.h> 中 | |
返回下一个多字节字符中的字节数 (函数) | |
将下一个多字节字符转换为宽字符 (函数) | |
(C11) |
将宽字符转换为其多字节表示形式 (函数) |
(C11) |
将窄多字节字符字符串转换为宽字符串 (函数) |
(C11) |
将宽字符串转换为窄多字节字符字符串 (函数) |
定义在头文件
<wchar.h> 中 | |
(C95) |
检查 mbstate_t 对象是否表示初始移位状态 (函数) |
(C95) |
将单个字节窄字符转换为宽字符,如果可能 (函数) |
(C95) |
将宽字符转换为单个字节窄字符,如果可能 (函数) |
(C95) |
返回下一个多字节字符中的字节数,给定状态 (函数) |
(C95) |
将下一个多字节字符转换为宽字符,给定状态 (函数) |
(C95)(C11) |
将宽字符转换为其多字节表示形式,给定状态 (函数) |
(C95)(C11) |
将窄多字节字符字符串转换为宽字符串,给定状态 (函数) |
(C95)(C11) |
将宽字符串转换为窄多字节字符字符串,给定状态 (函数) |
定义在头文件
<uchar.h> 中 | |
(C23) |
将窄多字节字符转换为 UTF-8 编码 (函数) |
(C23) |
将 UTF-8 字符串转换为窄多字节编码 (函数) |
(C11) |
从窄多字节字符串生成下一个 16 位宽字符 (函数) |
(C11) |
将 16 位宽字符转换为窄多字节字符串 (函数) |
(C11) |
从窄多字节字符串生成下一个 32 位宽字符 (函数) |
(C11) |
将 32 位宽字符转换为窄多字节字符串 (函数) |
[编辑] 类型
定义在头文件
<wchar.h> 中 | |
(C95) |
迭代多字节字符字符串所需的转换状态信息 (类) |
定义在头文件
<uchar.h> 中 | |
(C23) |
UTF-8 字符类型,是 unsigned char 的别名 (typedef) |
(C11) |
16 位宽字符类型 (typedef) |
(C11) |
32 位宽字符类型 (typedef) |
[编辑] 宏
定义在头文件
<limits.h> 中 | |
MB_LEN_MAX |
任何支持的语言环境中,多字节字符中的最大字节数 (宏常量) |
定义在头文件
<stdlib.h> 中 | |
MB_CUR_MAX |
当前语言环境中,多字节字符中的最大字节数 (宏变量) |
[编辑] 参考资料
- C11 标准 (ISO/IEC 9899:2011)
- 7.10 整数类型的大小 <limits.h> (p: 222)
- 7.22 通用实用程序 <stdlib.h> (p: 340-360)
- 7.28 Unicode 实用程序 <uchar.h> (p: 398-401)
- 7.29 扩展多字节和宽字符实用程序 <wchar.h> (p: 402-446)
- 7.31.12 通用实用程序 <stdlib.h> (p: 456)
- 7.31.16 扩展多字节和宽字符实用程序 <wchar.h> (p: 456)
- K.3.6 通用实用程序 <stdlib.h> (p: 604-614)
- K.3.9 扩展多字节和宽字符实用程序 <wchar.h> (p: 627-651)
- C99 标准 (ISO/IEC 9899:1999)
- 7.10 整型的大小 <limits.h> (p: 203)
- 7.20 通用实用程序 <stdlib.h> (p: 306-324)
- 7.24 扩展多字节和宽字符实用程序 <wchar.h> (p: 348-392)
- 7.26.10 通用实用程序 <stdlib.h> (p: 402)
- 7.26.12 扩展多字节和宽字符实用程序 <wchar.h> (p: 402)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 4.1.4 限制 <float.h> 和 <limits.h>
- 4.10 通用实用程序 <stdlib.h>
- 4.13.7 通用实用程序 <stdlib.h>
[编辑] 另请参见
C++ 文档 for 以空字符结尾的多字节字符串
|