Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::codecvt_utf8_utf16(3)    C++ Standard Libary   std::codecvt_utf8_utf16(3)

NAME
       std::codecvt_utf8_utf16 - std::codecvt_utf8_utf16

Synopsis
	  Defined in header <codecvt>
	  template<

	      class    Elem,						(since
       C++11)
	      unsigned long Maxcode = 0x10ffff,			   (deprecated
       in C++17)
	      std::codecvt_mode	 Mode =	(std::codecvt_mode)0 >	   (removed in
       C++26)
	  class	codecvt_utf8_utf16

	      :	public std::codecvt<Elem, char,	std::mbstate_t>;

	  std::codecvt_utf8_utf16 is a std::codecvt facet  which  encapsulates
       conversion
	  between  a  UTF-8  encoded  byte string and UTF-16 encoded character
       string. If Elem is
	  a 32-bit type, one UTF-16 code unit will be stored  in  each	32-bit
       character of the
	  output sequence.

	  This	is  an	N:M conversion facet, and cannot be used with std::ba-
       sic_filebuf (which
	  only permits 1:N conversions,	such as	UTF-32/UTF-8, between the  in-
       ternal and the
	  external  encodings).	 This facet can	be used	with std::wstring_con-
       vert.

Template Parameters
	  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

Member functions
	  constructor	constructs a new codecvt_utf8_utf16 facet
			(public	member function)
	  destructor	destroys a codecvt_utf8_utf16 facet
			(public	member function)

       std::codecvt_utf8_utf16::codecvt_utf8_utf16

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

	  Constructs  a	 new std::codecvt_utf8_utf16 facet, passes the initial
       reference counter
	  refs to the base class.

Parameters
	  refs - the number of references that link to the facet

       std::codecvt_utf8_utf16::~codecvt_utf8_utf16

	  ~codecvt_utf8_utf16();

	  Destroys the facet. Unlike the locale-managed	facets,	 this  facet's
       destructor is
	  public.

       Inherited from std::codecvt

Member types
	  Member name Definition
	  intern_type internT
	  extern_type externT
	  state_type  stateT

Member objects
	  Member name Type
	  id (static) std::locale::id

Member functions
			invokes	do_out
	  out		 (public  member  function of std::codecvt<InternT,Ex-
       ternT,StateT>)

			invokes	do_in
	  in		(public	member	function  of  std::codecvt<InternT,Ex-
       ternT,StateT>)

			invokes	do_unshift
	  unshift	 (public  member  function of std::codecvt<InternT,Ex-
       ternT,StateT>)

			invokes	do_encoding
	  encoding	(public	member	function  of  std::codecvt<InternT,Ex-
       ternT,StateT>)

			invokes	do_always_noconv
	  always_noconv	 (public  member  function of std::codecvt<InternT,Ex-
       ternT,StateT>)

			invokes	do_length
	  length	(public	member	function  of  std::codecvt<InternT,Ex-
       ternT,StateT>)

			invokes	do_max_length
	  max_length	 (public  member  function of std::codecvt<InternT,Ex-
       ternT,StateT>)

Protected member functions
			   converts a string from InternT to ExternT, such  as
       when writing to
	  do_out	   file
	  [virtual]	   (virtual protected member function of
			   std::codecvt<InternT,ExternT,StateT>)
			   converts  a string from ExternT to InternT, such as
       when reading
	  do_in		   from	file
	  [virtual]	   (virtual protected member function of
			   std::codecvt<InternT,ExternT,StateT>)
			   generates the termination character sequence	of Ex-
       ternT characters
	  do_unshift	   for incomplete conversion
	  [virtual]	   (virtual protected member function of
			   std::codecvt<InternT,ExternT,StateT>)
			   returns the number of ExternT characters  necessary
       to produce one
	  do_encoding	   InternT character, if constant
	  [virtual]	   (virtual protected member function of
			   std::codecvt<InternT,ExternT,StateT>)
			   tests  if  the facet	encodes	an identity conversion
       for all valid
	  do_always_noconv argument values
	  [virtual]	   (virtual protected member function of
			   std::codecvt<InternT,ExternT,StateT>)
			   calculates the length of the	 ExternT  string  that
       would be	consumed
	  do_length	   by conversion into given InternT buffer
	  [virtual]	   (virtual protected member function of
			   std::codecvt<InternT,ExternT,StateT>)
			   returns  the	 maximum  number of ExternT characters
       that could be
	  do_max_length	   converted into a single InternT character
	  [virtual]	   (virtual protected member function of
			   std::codecvt<InternT,ExternT,StateT>)

       Inherited from std::codecvt_base

	  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

Example
       // Run this code

	#include <cassert>
	#include <codecvt>
	#include <cstdint>
	#include <iostream>
	#include <locale>
	#include <string>

	int main()
	{
	    std::string	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" << std::showbase << std::hex;
	    for	(char16_t c : u16_conv)
		std::cout << static_cast<std::uint16_t>(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 << +static_cast<unsigned char>(c) << ' ';
	    std::cout << '\n';
	}

Output:
	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

See also
	 Character	  locale-defined   multibyte			 UTF-8
       UTF-16
	conversions	     (UTF-8, GB18030)
						       codecvt<char16_t,char,mb-
       state_t>
	  UTF-16	   mbrtoc16	 /	c16rtomb      (with	 C11's
       codecvt_utf8_utf16<char16_t>	N/A
		     DR488)
       codecvt_utf8_utf16<char32_t>
						       codecvt_utf8_utf16<wchar_t>
	   UCS-2     c16rtomb (without C11's DR488)	codecvt_utf8<char16_t>
       codecvt_utf16<char16_t>
	  UTF-32		  mbrtoc32		/	      c32rtomb
       codecvt<char32_t,char,mbstate_t>	codecvt_utf16<char32_t>
						       codecvt_utf8<char32_t>
	  system
	 wchar_t:
		     mbsrtowcs / wcsrtombs
	  UTF-32      use_facet<codecvt			 codecvt_utf8<wchar_t>
       codecvt_utf16<wchar_t> (non-Windows) <wchar_t,char,mbstate_t>>(locale)
	   UCS-2
	 (Windows)

				converts  between character encodings, includ-
       ing UTF-8, UTF-16,
	  codecvt		UTF-32
				(class template)
	  codecvt_mode
	  (C++11)		tags to	alter behavior of the standard codecvt
       facets
	  (deprecated in C++17)	(enum)
	  (removed in C++26)
	  codecvt_utf8
	  (C++11)		converts between UTF-8 and UCS-2/UCS-4
	  (deprecated in C++17)	(class template)
	  (removed in C++26)
	  codecvt_utf16
	  (C++11)		converts between UTF-16	and UCS-2/UCS-4
	  (deprecated in C++17)	(class template)
	  (removed in C++26)

http://cppreference.com		  2024.06.10	    std::codecvt_utf8_utf16(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::codecvt_utf8_utf16&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help