首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::codecvt_utf8_utf16

Defined in header <codecvt>

template< class Elem, unsigned long Maxcode = 0x10ffff, std::codecvt_mode Mode = (std::codecvt_mode)0 > class codecvt_utf8_utf16 : public std::codecvt<Elem, char, std::mbstate_t>;

(since C++11) (deprecated in C++17)

std::codecvt_utf8_utf16std::codecvt方面,它封装了UTF-8编码字节字符串和UTF-16编码字符串之间的转换。如果Elem是一种32位类型,一个UTF-16码单元将存储在每个32位字符的输出序列中.

这是一个N:m转换面,不能与std::basic_filebuf%28,它只允许内部编码和外部编码之间的1:n转换,例如UTF-32/UTF-8。此方面可用于std::wstring_convert...

模板参数

Elem

-

either char16_t, char32_t, or wchar_t

Maxcode

-

the largest value of Elem that this facet will read or write without error

Mode

-

a constant of type std::codecvt_mode

成员函数

(constructor)

constructs a new codecvt_utf8_utf16 facet (public member function)

(destructor)

destroys a codecvt_utf8_utf16 facet (public member function)

STD::编解码器[医]UTF8[医]utf 16::codecvt[医]UTF8[医]utf 16

explicit codecvt_utf8_utf16( std::size_t refs = 0 );

构造一个新的std::codecvt_utf8_utf16方面,传递初始参考计数器。refs给基类。

参数

refs

-

the number of references that link to the facet

STD::编解码器[医]UTF8[医]utf 16::~codecvt[医]UTF8[医]utf 16

~codecvt_utf8_utf16();

摧毁了这个面。与地区管理的方面不同,这个方面%27 s析构函数是公共的。

继承自STD::编解码器

成员类型

Member type

Definition

intern_type

internT

extern_type

externT

state_type

stateT

成员对象

Member name

Type

id (static)

std::locale::id

成员函数

out

invokes do_out (public member function of std::codecvt)

in

invokes do_in (public member function of std::codecvt)

unshift

invokes do_unshift (public member function of std::codecvt)

encoding

invokes do_encoding (public member function of std::codecvt)

always_noconv

invokes do_always_noconv (public member function of std::codecvt)

length

invokes do_length (public member function of std::codecvt)

max_length

invokes do_max_length (public member function of std::codecvt)

受保护成员函数

do_out virtual

converts a string from internT to externT, such as when writing to file (virtual protected member function of std::codecvt)

do_in virtual

converts a string from externT to internT, such as when reading from file (virtual protected member function of std::codecvt)

do_unshift virtual

generates the termination character sequence of externT characters for incomplete conversion (virtual protected member function of std::codecvt)

do_encoding virtual

returns the number of externT characters necessary to produce one internT character, if constant (virtual protected member function of std::codecvt)

do_always_noconv virtual

tests if the facet encodes an identity conversion for all valid argument values (virtual protected member function of std::codecvt)

do_length virtual

calculates the length of the externT string that would be consumed by conversion into given internT buffer (virtual protected member function of std::codecvt)

do_max_length virtual

returns the maximum number of externT characters that could be converted into a single internT character (virtual protected member function of std::codecvt)

继承自STD::编解码器[医]底座

Member type

Definition

enum result { ok, partial, error, noconv };

Unscoped enumeration type

Enumeration constant

Definition

ok

conversion was completed with no error

partial

not all source characters were converted

error

encountered an invalid character

noconv

no conversion required, input and output types are the same

二次

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <codecvt>
#include <cassert>
#include <locale>
 
int main()
{
    std::string u8 = u8"z\u00df\u6c34\U0001f34c";
    std::u16string u16 = u"z\u00df\u6c34\U0001f34c";
 
    // UTF-8 to UTF-16/char16_t
    std::u16string u16_conv = std::wstring_convert<
        std::codecvt_utf8_utf16<char16_t>, char16_t>{}.from_bytes(u8);
    assert(u16 == u16_conv);
    std::cout << "UTF-8 to UTF-16 conversion produced "
              << u16_conv.size() << " code units:\n";
    for (char16_t c : u16_conv)
        std::cout << std::hex << std::showbase << c << ' ';
 
    // UTF-16/char16_t to UTF-8
    std::string u8_conv = std::wstring_convert<
        std::codecvt_utf8_utf16<char16_t>, char16_t>{}.to_bytes(u16);
    assert(u8 == u8_conv);
    std::cout << "\nUTF-16 to UTF-8 conversion produced "
              << std::dec << u8_conv.size() << " bytes:\n" << std::hex;
    for (char c : u8_conv)
        std::cout << +(unsigned char)c << ' ';
}

二次

产出:

二次

代码语言:javascript
复制
UTF-8 to UTF-16 conversion produced 5 code units:
0x7a 0xdf 0x6c34 0xd83c 0xdf4c 
UTF-16 to UTF-8 conversion produced 10 bytes:
0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c

二次

另见

Characterconversions

locale-defined multibyte(UTF-8, GB18030)

UTF-8

UTF-16

UTF-16

mbrtoc16 / c16rtomb(with C11's DR488)

codecvt<char16_t, char, mbstate_t>codecvt_utf8_utf16<char16_t>codecvt_utf8_utf16<char32_t>codecvt_utf8_utf16<wchar_t>

N/A

UCS2

c16rtomb(without C11's DR488)

codecvt_utf8<char16_t> codecvt_utf8<wchar_t>(Windows).

codecvt_utf16<char16_t> codecvt_utf16<wchar_t>(Windows).

UTF-32

mbrtoc32 / c32rtomb.

codecvt<char32_t, char, mbstate_t> codecvt_utf8<char32_t> codecvt_utf8<wchar_t>(non-Windows).

codecvt_utf16<char32_t> codecvt_utf16<wchar_t>(non-Windows).

system wide:UTF-32(non-Windows)UCS2(Windows)

mbsrtowcs / wcsrtombs use_facet<codecvt <wchar_t, char, mbstate_t>>(locale).

No

No

codecvt

converts between character encodings, including UTF-8, UTF-16, UTF-32 (class template)

codecvt_mode (C++11)(deprecated in C++17)

tags to alter behavior of the standard codecvt facets (enum)

codecvt_utf8 (C++11)(deprecated in C++17)

converts between UTF-8 and UCS2/UCS4 (class template)

codecvt_utf16 (C++11)(deprecated in C++17)

converts between UTF-16 and UCS2/UCS4 (class template)

代码语言:txt
复制
 © cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券