在线文档教程
C++
本土化 | Localizations

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 0xffUTF-16 big-endian
0xff 0xfeUTF-16 little-endian
0xef 0xbb 0xbfUTF-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

二次

另见

codecvtconverts 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。

http://en.cppreference.com/w/cpp/locale/codecvt[医]模式