std::codecvt_mode
来自 cppreference.cn
                    
                                        
                    
                    
                                                            
                    | 定义于头文件  <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 之间转换 (类模板) | 


