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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::codecvt - std::codecvt

Synopsis
	  Defined in header <locale>
	  template<

	      class InternT,
	      class ExternT,
	      class StateT

	  > class codecvt;

	  Class	 template  std::codecvt	 encapsulates  conversion of character
       strings,	including
	  wide and multibyte, from one encoding	to another. All	file I/O oper-
       ations performed
	  through std::basic_fstream<CharT> use	the std::codecvt<CharT,	 char,
       std::mbstate_t>
	  facet	of the locale imbued in	the stream.

	  std-codecvt-inheritance.svg

					  Inheritance diagram

Specializations
	  The standard library is guaranteed to	provide	the following special-
       izations	(they
	  are required to be implemented by any	locale object):

	  Defined in header <locale>
	  std::codecvt<char, char, std::mbstate_t>  identity conversion
	  std::codecvt<char16_t, char,
	  std::mbstate_t>			     conversion	between	UTF-16
       and UTF-8
	  (since C++11)(deprecated in C++20)
	  std::codecvt<char16_t, char8_t,
	  std::mbstate_t>			    conversion between	UTF-16
       and UTF-8
	  (since C++20)
	  std::codecvt<char32_t, char,
	  std::mbstate_t>			     conversion	between	UTF-32
       and UTF-8
	  (since C++11)(deprecated in C++20)
	  std::codecvt<char32_t, char8_t,
	  std::mbstate_t>			    conversion between	UTF-32
       and UTF-8
	  (since C++20)
	  std::codecvt<wchar_t,	 char,		      conversion  between  the
       system's	native
	  std::mbstate_t>			    wide and  the  single-byte
       narrow character
						    sets

Member types
	  Member name Definition
	  intern_type InternT
	  extern_type ExternT
	  state_type  StateT

Member functions
	  constructor	constructs a new codecvt facet
			(public	member function)
	  out		invokes	do_out
			(public	member function)
	  in		invokes	do_in
			(public	member function)
	  unshift	invokes	do_unshift
			(public	member function)
	  encoding	invokes	do_encoding
			(public	member function)
	  always_noconv	invokes	do_always_noconv
			(public	member function)
	  length	invokes	do_length
			(public	member function)
	  max_length	invokes	do_max_length
			(public	member function)

Member objects
	  static std::locale::id id id of the locale
				    (public member object)

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

       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
	  The  following  examples reads a UTF-8 file using a locale which im-
       plements	UTF-8
	  conversion in	codecvt<wchar_t, char, std::mbstate_t> and converts  a
       UTF-8 string to
	  UTF-16 using one of the standard specializations of std::codecvt.

       // Run this code

	#include <codecvt>
	#include <cstdint>
	#include <fstream>
	#include <iomanip>
	#include <iostream>
	#include <locale>
	#include <string>

	//  utility  wrapper  to adapt locale-bound facets for wstring/wbuffer
       convert
	template<class Facet>
	struct deletable_facet : Facet
	{
	    template<class... Args>
	    deletable_facet(Args&&...	   args)       :       Facet(std::for-
       ward<Args>(args)...) {}
	    ~deletable_facet() {}
	};

	int main()
	{
	    // UTF-8 narrow multibyte encoding
	    std::string		 data	      =		reinterpret_cast<const
       char*>(+u8"z\u00df\u6c34\U0001f34c");
			       // or reinterpret_cast<const char*>(+u8"z")
			       //					    or
       "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c"

	    std::ofstream("text.txt") << data;

	    // using system-supplied locale's codecvt facet
	    std::wifstream fin("text.txt");
	    // reading from wifstream will use codecvt<wchar_t,	char, std::mb-
       state_t>
	    //	this  locale's codecvt converts	UTF-8 to UCS4 (on systems such
       as Linux)
	    fin.imbue(std::locale("en_US.UTF-8"));
	    std::cout << "The UTF-8 file  contains  the	 following  UCS4  code
       units:\n" << std::hex;
	    for	(wchar_t c; fin	>> c;)
		std::cout << "U+" << std::setw(4) << std::setfill('0')
			  << static_cast<uint32_t>(c) << ' ';

	    // using standard (locale-independent) codecvt facet
	    std::wstring_convert<
		deletable_facet<std::codecvt<char16_t, char, std::mbstate_t>>,
       char16_t> conv16;
	    std::u16string str16 = conv16.from_bytes(data);

	    std::cout  <<  "\n\nThe  UTF-8  file contains the following	UTF-16
       code units:\n"
		      << std::hex;
	    for	(char16_t c : str16)
		std::cout << "U+" << std::setw(4) << std::setfill('0')
			  << static_cast<uint16_t>(c) << ' ';
	    std::cout << '\n';
	}

Output:
	The UTF-8 file contains	the following UCS4 code	units:
	U+007a U+00df U+6c34 U+1f34c

	The UTF-8 file contains	the following UTF-16 code units:
	U+007a U+00df U+6c34 U+d83c U+df4c

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)

	  codecvt_base		defines	character conversion errors
				(class)
				represents  the	 system-supplied  std::codecvt
       for the named
	  codecvt_byname	locale
				(class template)
	  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)
	  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(3)

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

home | help