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 facet 表示的编码将每个内部字符映射到相同且固定数量的外部字符,则返回该数值。如果编码是变长编码(例如 UTF-8 或 UTF-16),返回 0 。如果编码具有状态依赖性,返回 - 1

返回值

对应一个 internT 字符所需的精确 externT 字符数量(若为常量值)。若该数值可变则为 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]
返回单个 InternT 字符可转换的最大 ExternT 字符数
(虚受保护成员函数)