namespace std { enum codecvt_mode { consume_header = 4, generate_header = 2, little_endian = 1 }; template <class Elem, unsigned long Maxcode = 0x10ffff, codecvt_mode Mode = (codecvt_mode)0> class codecvt_utf8 : public codecvt<Elem, char, mbstate_t> { public: explicit codecvt_utf8(size_t refs = 0); ~codecvt_utf8(); }; template <class Elem, unsigned long Maxcode = 0x10ffff, codecvt_mode Mode = (codecvt_mode)0> class codecvt_utf16 : public codecvt<Elem, char, mbstate_t> { public: explicit codecvt_utf16(size_t refs = 0); ~codecvt_utf16(); }; template <class Elem, unsigned long Maxcode = 0x10ffff, codecvt_mode Mode = (codecvt_mode)0> class codecvt_utf8_utf16 : public codecvt<Elem, char, mbstate_t> { public: explicit codecvt_utf8_utf16(size_t refs = 0); ~codecvt_utf8_utf16(); }; }
Для каждого из трех аспектов преобразования кода codecvt_utf8, codecvt_utf16и codecvt_utf8_utf16:
Elem тип широких символов, например wchar_t, char16_tили char32_t.
Maxcode - это самый большой код с широкими символами, который фасет будет читать или писать без сообщения об ошибке преобразования.
Если (Mode & consume_header), то при чтении многобайтовой последовательности фасет должен использовать начальную последовательность заголовка, если она присутствует, для определения порядка следования байтов последующей многобайтовой последовательности, которая должна быть прочитана.
Если (Mode & generate_header), фасет должен генерировать начальную последовательность заголовка при записи многобайтовой последовательности, чтобы объявить о порядке следования записываемой последующей многобайтовой последовательности.
Если (Mode & little_endian), фасет должен генерировать многобайтовую последовательность в обратном порядке, в отличие от стандартного обратного порядка байтов.
Фасет должен преобразовывать многобайтовые последовательности UTF-8 в UCS2 или UCS4 (в зависимости от размера Elem) в программе.
Порядок байтов не влияет на то, как читаются или записываются многобайтовые последовательности.
Многобайтовые последовательности могут быть записаны в виде текстового или двоичного файла.
Фасет должен преобразовывать многобайтовые последовательности UTF-16 в UCS2 или UCS4 (в зависимости от размера Elem) в программе.
Многобайтовые последовательности должны читаться или записываться в соответствии с указанным выше Mode флагом.
Многобайтовые последовательности могут быть записаны только как двоичный файл. Попытка записи в текстовый файл приводит к неопределенному поведению.
Для грани : codecvt_utf8_utf16
Фасет должен преобразовывать многобайтовые последовательности UTF-8 в UTF-16 (один или два 16-битных кода) в программе.
Порядок байтов не влияет на то, как читаются или записываются многобайтовые последовательности.
Многобайтовые последовательности могут быть записаны в виде текстового или двоичного файла.
См. Также: ISO / IEC 10646-1: 1993.