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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::codecvt_utf16 - std::codecvt_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_utf16

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

	  std::codecvt_utf16 is	a std::codecvt facet which  encapsulates  con-
       version between a
	  UTF-16 encoded byte string and UCS-2 or UTF-32 character string (de-
       pending on the
	  type of Elem). This std::codecvt facet can be	used to	read and write
       UTF-16 files in
	  binary mode.

	  UCS-2	 is the	same encoding as UTF-16, except	that it	encodes	scalar
       (since C++23)
	  values in the	range U+0000-U+FFFF (Basic Multilingual	Plane) only.

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

       std::codecvt_utf16::codecvt_utf16

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

	  Constructs a new std::codecvt_utf16 facet, passes the	initial	refer-
       ence counter refs
	  to the base class.

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

       std::codecvt_utf16::~codecvt_utf16

	  ~codecvt_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

Notes
	  Although the standard	requires that this facet works with UCS-2 when
       the size	of
	  Elem	is  16	bits,  some implementations use	UTF-16 instead,	making
       this a
	  non-converting locale. The term "UCS-2" was deprecated  and  removed
       from ISO	10646.

	  Since	 C++23,	 UCS-2	does not refer to its original definition any-
       more. It	becomes	a
	  synonym of UTF-16, but with a	smaller	encoding range.

Example
	  The following	example	demonstrates decoding of UTF-16le  file	 on  a
       system with 32-bit
	  wchar_t.  On	a  system  with	 16-bit	wchar_t, decoding of the third
       character will fail
	  because std::codecvt_utf16<char16_t> produces	UCS-2, not UTF-16.

       // Run this code

	#include <codecvt>
	#include <cwchar>
	#include <fstream>
	#include <iostream>
	#include <locale>
	#include <string>

	void prepare_file()
	{
	    // UTF-16le	data (if host system is	little-endian)
	    char16_t utf16le[4]	= {0x007a,	    // latin small letter  'z'
       U+007a
				   0x6c34,	     //	 CJK ideograph "water"
       U+6c34
				   0xd834,  0xdd0b};  //  musical  sign	 segno
       U+1d10b

	    // store in	a file
	    std::ofstream fout("text.txt");
	    fout.write(reinterpret_cast<char*>(utf16le), sizeof	utf16le);
	}

	int main()
	{
	    prepare_file();
	    // open as a byte stream
	    std::wifstream fin("text.txt", std::ios::binary);
	    // apply facet
	    fin.imbue(std::locale(fin.getloc(),
		new   std::codecvt_utf16<wchar_t,   0x10ffff,  std::little_en-
       dian>));

	    wchar_t c =	0;
	    for	(std::cout << std::showbase << std::hex; fin.get(c);
		 std::cout << static_cast<std::wint_t>(c) << '\n');
	}

Output:
	0x7a
	0x6c34
	0x1d10b

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_utf8_utf16
	  (C++11)		converts between UTF-8 and UTF-16
	  (deprecated in C++17)	(class template)
	  (removed in C++26)

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

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

home | help