std::codecvt_mode
STD::编解码器[医]模式
Defined in header | | |
---|---|---|
enum codecvt_mode { consume_header = 4, generate_header = 2, little_endian = 1 }; | | (since C++11) (deprecated in C++17) |
面std::codecvt_utf8
,,,std::codecvt_utf16
,和std::codecvt_utf8_utf16
接受类型的可选值std::codecvt_mode
作为模板参数,指定Unicode字符串转换的可选特性。
常数
在标头中定义<locale>
*。
价值意义
小[医]Endian假设输入为小端字节顺序%28仅应用于utf-16输入,默认为大端字节数%29。
消费[医]头部使用字节顺序标记(如果出现在输入序列的开头),如果出现在utf-16%29的情况下,则使用%28,则依赖它指定的字节顺序来解码其余的输入。
生成[医]头输出输出序列开始处的字节顺序标记。
可识别的字节顺序标记是:
0xfe 0xff | UTF-16 big-endian |
---|---|
0xff 0xfe | UTF-16 little-endian |
0xef 0xbb 0xbf | UTF-8 (no effect on endianness) |
如果std::consume_header
当读取以字节顺序标记开头的文件时,不选择Unicode字符U+FEFF%28Zero宽度不间断空间%29作为字符串内容的第一个字符。
例
下面的示例演示如何使用UTF-8 BOM。
二次
#include <fstream>
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
int main()
{
// UTF-8 data with BOM
std::ofstream("text.txt") << u8"\ufeffz\u6c34\U0001d10b";
// read the UTF8 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 << c << '\n';
}
二次
产出:
二次
0x7a
0x6c34
0x1d10b
二次
另见
codecvt | converts between character encodings, including UTF-8, UTF-16, UTF-32 (class template) |
---|---|
codecvt_utf8 (C++11)(deprecated in C++17) | converts between UTF-8 and UCS2/UCS4 (class template) |
codecvt_utf16 (C++11)(deprecated in C++17) | converts between UTF-16 and UCS2/UCS4 (class template) |
codecvt_utf8_utf16 (C++11)(deprecated in C++17) | converts between UTF-8 and UTF-16 (class template) |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。