Spec-Zone.ru › C++

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

Определено в заголовочном файле <locale>
public:
int encoding() const throw();
(1) (до C++11)
public:
int encoding() const noexcept;
(начиная с C++11)
protected:
virtual int do_encoding() const throw();
(2) (до 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
(макропеременная)
do_max_length
[виртуальная]
возвращает максимальное число символов ExternT, которые могут быть преобразованы в один символ InternT
(виртуальная защищённая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/locale/codecvt/encoding

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API