std:: codecvt_mode
|
Определено в заголовочном файле
<codecvt>
|
||
|
enum
codecvt_mode
{
consume_header
=
4
,
|
(начиная с 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 с обратным порядком байтов |
0xff 0xfe
|
UTF-16 с прямым порядком байтов |
0xef 0xbb 0xbf
|
UTF-8 (не влияет на порядок байтов) |
Если
std::consume_header
не выбран при чтении файла, начинающегося с метки порядка байтов, символ Юникода U+FEFF (Некоторый неразрывный пробел нулевой ширины) будет прочитан как первый символ строкового содержимого.
Пример
Следующий пример демонстрирует обработку BOM 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
(шаблон класса) |