std::codecvt_mode
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    |   定义于头文件  <codecvt>
  | 
||
|   enum codecvt_mode {     consume_header = 4,  | 
 (C++11 起)  (C++17 中弃用)  | 
|
平面 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 <fstream> #include <iostream> #include <string> #include <locale> #include <codecvt> int main() { // 带 BOM 的 UTF-8 数据 std::ofstream("text.txt") << u8"\ufeffz\u6c34\U0001d10b"; // 读 UTF8 文件,跳过 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 << c << '\n'; }
输出:
0x7a 0x6c34 0x1d10b
参阅
|   在字符编码间转换,包括 UTF-8、UTF-16、UTF-32  (类模板)  | |
|    (C++11)(C++17 中弃用)  | 
  在 UTF-8 与 UCS2/UCS4 间转换  (类模板)  | 
|    (C++11)(C++17 中弃用)  | 
  在 UTF-16 与 UCS2/UCS4 间转换  (类模板)  | 
|    (C++11)(C++17 中弃用)  | 
  在 UTF-8 与 UTF-16 间转换  (类模板)  |