std:: codecvt_mode
| Localization library | |||||||||||||||||||||||||
| Regular expressions library (C++11) | |||||||||||||||||||||||||
| Formatting library (C++20) | |||||||||||||||||||||||||
| Null-terminated sequence utilities | |||||||||||||||||||||||||
| Byte strings | |||||||||||||||||||||||||
| Multibyte strings | |||||||||||||||||||||||||
| Wide strings | |||||||||||||||||||||||||
| Primitive numeric conversions | |||||||||||||||||||||||||
|
|||||||||||||||||||||||||
| Text encoding identifications | |||||||||||||||||||||||||
|
|||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定义于头文件
<codecvt>
|
||
|
enum
codecvt_mode
{
consume_header
=
4
,
|
(C++11 起)
(C++17 中弃用) (C++26 中移除) |
|
方面
std::codecvt_utf8
、
std::codecvt_utf16
和
std::codecvt_utf8_utf16
接受一个可选的
std::codecvt_mode
类型值作为模板参数,该参数指定 Unicode 字符串转换的可选特性。
常量
|
定义于头文件
<locale>
|
|
| 枚举项 | 含义 |
little_endian
|
假定输入为小端字节序(仅适用于UTF-16输入,默认为大端序) |
consume_header
|
若输入序列开头存在字节顺序标记则消耗该标记,并(对于UTF-16)依据其指定的字节序解码剩余输入 |
generate_header
|
在输出序列开头生成字节顺序标记 |
识别的字节顺序标记为:
0xfe 0xff
|
UTF-16 大端序 |
0xff 0xfe
|
UTF-16 小端序 |
0xef 0xbb 0xbf
|
UTF-8(对字节序无影响) |
如果在读取以字节顺序标记开头的文件时未选择
std::consume_header
,Unicode字符U+FEFF(零宽度非断空格)将被读取为字符串内容的第一个字符。
示例
以下示例演示了如何消费UTF-8 BOM:
#include <codecvt> #include <cwchar> #include <fstream> #include <iostream> #include <locale> #include <string> int main() { // UTF-8 data with BOM std::ofstream{"text.txt"} << "\ufeffz\u6c34\U0001d10b"; // read the UTF-8 file, skipping the BOM std::wifstream fin{"text.txt"}; fin.imbue(std::locale(fin.getloc(), new std::codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>)); for (wchar_t c; fin.get(c);) std::cout << std::hex << std::showbase << (std::wint_t)c << '\n'; }
输出:
0x7a 0x6c34 0x1d10b
参见
|
在字符编码间进行转换,包括 UTF-8、UTF-16、UTF-32
(类模板) |
|
|
(C++11)
(C++17 中弃用)
(C++26 中移除)
|
在 UTF-8 与 UCS-2/UCS-4 间进行转换
(类模板) |
|
(C++11)
(C++17 中弃用)
(C++26 中移除)
|
在 UTF-16 与 UCS-2/UCS-4 间进行转换
(类模板) |
|
(C++11)
(C++17 中弃用)
(C++26 中移除)
|
在 UTF-8 与 UTF-16 间进行转换
(类模板) |