std::codecvt_mode
Определено в заголовке <codecvt> |
||
|---|---|---|
enum codecvt_mode {
consume_header = 4,
generate_header = 2,
little_endian = 1
};
|
(с C++11) (устарело в C++17) (удалено в C++26) |
Фасеты std::codecvt_utf8, std::codecvt_utf16, и std::codecvt_utf8_utf16 принимают необязательное значение типа std::codecvt_mode в качестве шаблонного аргумента, который задаёт необязательные особенности преобразования строковых данных Unicode.
Постоянные значения
Определено в заголовке <locale> |
|
|---|---|
| Значение | Значение |
little_endian |
предполагает, что входные данные в формате little-endian (применимо только к вводу UTF-16, по умолчанию используется big-endian) |
consume_header |
потребляет метку порядка байтов, если она присутствует в начале входной последовательности, и (в случае UTF-16) использует порядок байтов, указанный в ней, для декодирования остальной части входных данных |
generate_header |
выводит метку порядка байтов в начале выходной последовательности |
Распознаваемые метки порядка байтов:
0xfe 0xff |
UTF-16 big-endian |
0xff 0xfe |
UTF-16 little-endian |
0xef 0xbb 0xbf |
UTF-8 (без влияния на порядок байтов) |
Если std::consume_header не выбрано при чтении файла, начинающегося с метки порядка байтов, символ Unicode U+FEFF (пробел нулевой ширины) будет считаться первым символом содержимого строки.
Пример
Следующий пример демонстрирует потребление метки порядка байтов UTF-8:
#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 (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/locale/codecvt_mode