C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- std::locale
- std::use_facet
- std::has_facet
- std::isspace(std::locale)
- std::isblank(std::locale)
- std::codecvt
- std::wstring_convert
- std::iscntrl(std::locale)
- std::isupper(std::locale)
- std::islower(std::locale)
- std::isalpha(std::locale)
- std::isdigit(std::locale)
- std::ispunct(std::locale)
- std::isxdigit(std::locale)
- std::isalnum(std::locale)
- std::isprint(std::locale)
- std::isgraph(std::locale)
- std::toupper(std::locale)
- std::tolower(std::locale)
- std::wbuffer_convert
- std::ctype_base
- std::codecvt_base
- std::messages_base
- std::time_base
- std::money_base
- std::ctype
- std::ctype<char>
- std::collate
- std::messages
- std::time_get
- std::time_put
- std::num_get
- std::num_put
- std::numpunct
- std::money_get
- std::money_put
- std::moneypunct
- std::ctype_byname
- std::codecvt_byname
- std::messages_byname
- std::collate_byname
- std::time_get_byname
- std::time_put_byname
- std::numpunct_byname
- std::moneypunct_byname
- std::codecvt_utf8
- std::codecvt_utf16
- std::codecvt_utf8_utf16
- std::codecvt_mode
- std::setlocale
- std::localeconv
- std::lconv
- LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME
- 注释
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
std::codecvt_mode
定义于头文件 <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 间转换 (类模板) |