Namespaces
Variants

std::codecvt<InternT,ExternT,StateT>:: encoding, do_encoding

From cppreference.net
Определено в заголовке <locale>
(1)
public :
int encoding ( ) const throw ( ) ;
(до C++11)
public :
int encoding ( ) const noexcept ;
(начиная с C++11)
(2)
protected :
virtual int do_encoding ( ) const throw ( ) ;
(до C++11)
protected :
virtual int do_encoding ( ) const noexcept ;
(начиная с C++11)
1) Публичная функция-член, вызывает функцию-член do_encoding самого производного класса.
2) Если кодировка, представленная этим аспектом codecvt, отображает каждый внутренний символ на одинаковое, постоянное количество внешних символов, возвращает это число. Если кодировка имеет переменную длину (например, UTF-8 или UTF-16), возвращает 0 . Если кодировка зависит от состояния, возвращает - 1 .

Возвращаемое значение

Точное количество externT символов, соответствующих одному internT символу, если постоянно. 0 если количество варьируется, - 1 если кодировка зависит от состояния.

Неконвертирующая специализация std:: codecvt < char , char , std:: mbstate_t > возвращает 1 .

Пример

#include <iostream>
#include <locale>
int main()
{
    std::cout << "en_US.utf8 is a variable-length encoding, encoding() returns "
              << std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(
                     std::locale("en_US.utf8")
                 ).encoding() << '\n';
    std::cout << "zh_CN.gb18030 is also variable-length, encoding() == "
              << std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(
                     std::locale("zh_CN.gb18030")
                 ).encoding() << '\n';
    std::cout << "ru_RU.koi8r is a single-byte encoding, encoding() == "
              << std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(
                     std::locale("ru_RU.koi8r")
                 ).encoding() << '\n';
}

Вывод:

en_US.utf8 is a variable-length encoding, encoding() returns 0
zh_CN.gb18030 is also variable-length, encoding() == 0
ru_RU.koi8r is a single-byte encoding, encoding() == 1

Смотрите также

MB_CUR_MAX
максимальное количество байтов в многобайтовом символе в текущей локали C
(макропеременная)
[virtual]
возвращает максимальное количество ExternT символов, которые могут быть преобразованы в один InternT символ
(виртуальная защищенная функция-член)