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

来自cppreference.com
< cpp‎ | locale‎ | codecvt
 
 
本地化库
本地环境与平面
本地环境
平面类别基类
ctype(字符类别)平面
numeric(数值)平面
collate(对照比较)平面
time(时间)平面
monetary(货币)平面
messages(消息)平面
字符分类与转换
字符分类
转换
编码转换平面
(C++11)    
C 本地环境
 
 
在标头 <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

返回值

对应一个 internT 字符的准确 externT 字符数。若该数变化则为 0 ,若编码依赖平台则为 -1

不转换特化 std::codecvt<char, char, std::mbstate_t> 返回 1

示例

#include <locale>
#include <iostream>
 
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 本地环境中多字节字符的最大字节数
(宏变量)
返回能转换成单个 InternT 字符的最大 ExternT 字符数
(虚受保护成员函数)