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

NAME
     std::codecvt_byname - std::codecvt_byname

Synopsis
	Defined in header <locale>
	template< class InternT, class ExternT, class State >
	class codecvt_byname : public std::codecvt<InternT, ExternT, State>;

	std::codecvt_byname  is  a  std::codecvt facet which encapsulates multi-
     byte/wide
	character conversion rules of a locale specified at its construction.

Specializations
	The standard library is guaranteed to provide the following  specializa-
     tions:

	Defined in header <locale>
	std::codecvt_byname<char, char,        identity conversion
	std::mbstate_t>
	std::codecvt_byname<char16_t,  char,	 conversion  between  UTF-16 and
     UTF-8 (since
	std::mbstate_t> 		       C++11)(deprecated in C++20)
	std::codecvt_byname<char16_t, char8_t,	conversion  between  UTF-16  and
     UTF-8 (since
	std::mbstate_t> 		       C++20)
	std::codecvt_byname<char32_t,  char,	 conversion  between  UTF-32 and
     UTF-8 (since
	std::mbstate_t> 		       C++11)(deprecated in C++20)
	std::codecvt_byname<char32_t, char8_t,	conversion  between  UTF-32  and
     UTF-8 (since
	std::mbstate_t> 		       C++20)
	std::codecvt_byname<wchar_t,  char,	 locale-specific  conversion be-
     tween wide
	std::mbstate_t> 		       string and narrow character sets

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

     std::codecvt_byname::codecvt_byname

	explicit codecvt_byname( const char* name, std::size_t refs = 0 );
	explicit codecvt_byname( const std::string&  name,  std::size_t  refs  =
     (since C++11)
	0 );

	Constructs a new std::codecvt_byname facet for a locale with name.

	refs  is  used for resource management: if refs == 0, the implementation
     destroys the
	facet, when the last std::locale object holding it is destroyed.  Other-
     wise, the
	object is not destroyed.

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

     std::codecvt_byname::~codecvt_byname

	protected:
	~codecvt_byname();

	Destroys the facet.

     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 ExternT
     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
	This  example  demonstrates  reading  a  GB18030-encoded  file using the
     codecvt facet
	from a GB18030-aware locale.

     // Run this code

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

      int main()
      {
	  // GB18030 narrow multibyte encoding
	  std::ofstream("text.txt") << "\x7a"		   // letter 'z', U+007a
				       "\x81\x30\x89\x38"  // letter 'A', U+00df
				       "\xcb\xae"	     //   CJK	ideogram
     'ae<degree>'' (water), U+6c34
				       "\x94\x32\xbc\x35";  // musical sign 'dh'
     (segno), U+1d10b

	  std::wifstream fin("text.txt");
	  fin.imbue(std::locale(fin.getloc(),
		    new     std::codecvt_byname<wchar_t,     char,	std::mb-
     state_t>("zh_CN.gb18030")));

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

Possible output:
      0x7a
      0xdf
      0x6c34
      0x1d10b

	Defect reports

	The  following	behavior-changing  defect  reports were applied retroac-
     tively to
	previously published C++ standards.

	  DR   Applied to	    Behavior as published		 Correct
     behavior
			  the  standard  library  did not need to	two spe-
     cializations are
	LWG 21 C++98	  provide				     required
			  any std::codecvt_byname specializations

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

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

home | help