C++
本土化 | Localizations

std::codecvt_utf8

STD::编解码器[医]UTF8

Defined in header
template< class Elem, unsigned long Maxcode = 0x10ffff, std::codecvt_mode Mode = (std::codecvt_mode)0 > class codecvt_utf8 : public std::codecvt<Elem, char, std::mbstate_t>;(since C++11) (deprecated in C++17)

std::codecvt_utf8std::codecvt方面,它封装Utf-8编码字节字符串与UC 2或UC 4字符串%28之间的转换,具体取决于Elem29%。这个编解码面可以用来读取和写入UTF-8文件,包括文本和二进制文件.

模板参数

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 facet (public member function)
(destructor)destroys a codecvt_utf8 facet (public member function)

STD::编解码器[医]UTF 8:[医]UTF8

explicit codecvt_utf8( std::size_t refs = 0

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

参数

refs-the number of references that link to the facet

STD::编解码器[医]UTF 8:~codecvt[医]UTF8

~codecvt_utf8(

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

继承自STD::编解码器

成员类型

Member typeDefinition
intern_typeinternT
extern_typeexternT
state_typestateT

成员对象

Member nameType
id (static)std::locale::id

成员函数

outinvokes do_out (public member function of std::codecvt)
ininvokes do_in (public member function of std::codecvt)
unshiftinvokes do_unshift (public member function of std::codecvt)
encodinginvokes do_encoding (public member function of std::codecvt)
always_noconvinvokes do_always_noconv (public member function of std::codecvt)
lengthinvokes do_length (public member function of std::codecvt)
max_lengthinvokes do_max_length (public member function of std::codecvt)

受保护成员函数

do_out virtualconverts a string from internT to externT, such as when writing to file (virtual protected member function of std::codecvt)
do_in virtualconverts a string from externT to internT, such as when reading from file (virtual protected member function of std::codecvt)
do_unshift virtualgenerates the termination character sequence of externT characters for incomplete conversion (virtual protected member function of std::codecvt)
do_encoding virtualreturns the number of externT characters necessary to produce one internT character, if constant (virtual protected member function of std::codecvt)
do_always_noconv virtualtests if the facet encodes an identity conversion for all valid argument values (virtual protected member function of std::codecvt)
do_length virtualcalculates 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 virtualreturns the maximum number of externT characters that could be converted into a single internT character (virtual protected member function of std::codecvt)

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

Member typeDefinition
enum result { ok, partial, error, noconv };Unscoped enumeration type

Enumeration constantDefinition
okconversion was completed with no error
partialnot all source characters were converted
errorencountered an invalid character
noconvno conversion required, input and output types are the same

下面的示例演示了UCS 2/UTF-8和UTF-16/UTF-8转换之间的区别:字符串中的第三个字符不是有效的UC 2字符。

二次

#include <iostream> #include <string> #include <locale> #include <codecvt> int main() { // UTF-8 data. The character U+1d10b, musical sign segno, does not fit in UCS2 std::string utf8 = u8"z\u6c34\U0001d10b"; // the UTF-8 / UTF-16 standard conversion facet std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> utf16conv; std::u16string utf16 = utf16conv.from_bytes(utf8 std::cout << "UTF16 conversion produced " << utf16.size() << " code points:\n"; for (char16_t c : utf16) std::cout << std::hex << std::showbase << c << '\n'; // the UTF-8 / UCS2 standard conversion facet std::wstring_convert<std::codecvt_utf8<char16_t>, char16_t> ucs2conv; try { std::u16string ucs2 = ucs2conv.from_bytes(utf8 } catch(const std::range_error& e) { std::u16string ucs2 = ucs2conv.from_bytes(utf8.substr(0, ucs2conv.converted()) std::cout << "UCS2 failed after producing " << std::dec << ucs2.size()<<" characters:\n"; for (char16_t c : ucs2) std::cout << std::hex << std::showbase << c << '\n'; } }

二次

产出:

二次

UTF16 conversion produced 4 code points: 0x7a 0x6c34 0xd834 0xdd0b UCS2 failed after producing 2 characters: 0x7a 0x6c34

二次

另见

Characterconversionslocale-defined multibyte(UTF-8, GB18030)UTF-8UTF-16
UTF-16mbrtoc16 / 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
UCS2c16rtomb(without C11's DR488)codecvt_utf8<char16_t> codecvt_utf8<wchar_t>(Windows).codecvt_utf16<char16_t> codecvt_utf16<wchar_t>(Windows).
UTF-32mbrtoc32 / 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).NoNo

codecvtconverts 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_utf16 (C++11)(deprecated in C++17)converts between UTF-16 and UCS2/UCS4 (class template)
codecvt_utf8_utf16 (C++11)(deprecated in C++17)converts between UTF-8 and UTF-16 (class template)

© cppreference.com

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

http://en.cppreference.com/w/cpp/locale/codecvt[医]UTF8