Namespaces
Variants

std:: codecvt_byname

From cppreference.net
Definiert im Header <locale>
template < class InternT, class ExternT, class State >
class codecvt_byname : public std:: codecvt < InternT, ExternT, State > ;

std::codecvt_byname ist ein std::codecvt Facette, das die Multibyte-/Breitzeichen-Konvertierungsregeln eines Locales kapselt, das bei seiner Konstruktion spezifiziert wird.

Inhaltsverzeichnis

Spezialisierungen

Die Standardbibliothek garantiert die Bereitstellung der folgenden Spezialisierungen:

Definiert im Header <locale>
std :: codecvt_byname < char , char , std:: mbstate_t > Identitätskonvertierung
std :: codecvt_byname < char16_t , char , std:: mbstate_t >
(seit C++11) (veraltet in C++20)
Konvertierung zwischen UTF-16 und UTF-8
std :: codecvt_byname < char16_t , char8_t, std:: mbstate_t >
(seit C++20)
Konvertierung zwischen UTF-16 und UTF-8
std :: codecvt_byname < char32_t , char , std:: mbstate_t >
(seit C++11) (veraltet in C++20)
Konvertierung zwischen UTF-32 und UTF-8
std :: codecvt_byname < char32_t , char8_t, std:: mbstate_t >
(seit C++20)
Konvertierung zwischen UTF-32 und UTF-8
std :: codecvt_byname < wchar_t , char , std:: mbstate_t > Lokalspezifische Konvertierung zwischen Breitzeichen- und Schmalzeichen-Zeichensätzen

Memberfunktionen

(Konstruktor)
konstruiert einen neuen codecvt_byname Facette
(öffentliche Elementfunktion)
(Destruktor)
zerstört eine codecvt_byname Facette
(geschützte Elementfunktion)

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 = 0 ) ;
(seit C++11)

Konstruiert einen neuen std::codecvt_byname -Facet für ein Locale mit name .

refs wird für die Ressourcenverwaltung verwendet: wenn refs == 0 , zerstört die Implementierung den Facet, wenn das letzte std::locale -Objekt, das ihn enthält, zerstört wird. Andernfalls wird das Objekt nicht zerstört.

Parameter

name - der Name des Locale
refs - die Anzahl der Referenzen, die mit dem Facet verknüpft sind

std::codecvt_byname:: ~codecvt_byname

protected :
~codecvt_byname ( ) ;

Zerstört den Facet.

Geerbt von std:: codecvt

Verschachtelte Typen

Typ Definition
intern_type internT
extern_type externT
state_type stateT

Datenmitglieder

Member Beschreibung
std::locale::id id [static] der Identifikator des Facets

Memberfunktionen

ruft do_out auf
(öffentliche Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
ruft do_in auf
(öffentliche Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
ruft do_unshift auf
(öffentliche Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
ruft do_encoding auf
(öffentliche Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
ruft do_always_noconv auf
(öffentliche Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
ruft do_length auf
(öffentliche Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
ruft do_max_length auf
(öffentliche Elementfunktion von std::codecvt<InternT,ExternT,StateT> )

Geschützte Elementfunktionen

[virtual]
konvertiert eine Zeichenkette von InternT zu ExternT , beispielsweise beim Schreiben in eine Datei
(geschützte virtuelle Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
[virtual]
konvertiert eine Zeichenkette von ExternT zu InternT , beispielsweise beim Lesen aus einer Datei
(geschützte virtuelle Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
[virtual]
erzeugt die Abschlusszeichenfolge von ExternT -Zeichen für unvollständige Konvertierung
(geschützte virtuelle Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
[virtual]
gibt die Anzahl der ExternT -Zeichen zurück, die zur Erzeugung eines InternT -Zeichens erforderlich sind, falls konstant
(geschützte virtuelle Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
prüft, ob das Facet für alle gültigen Argumentwerte eine Identitätskonvertierung durchführt
(geschützte virtuelle Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
[virtual]
berechnet die Länge der ExternT -Zeichenkette, die durch Konvertierung in den gegebenen InternT -Puffer verbraucht würde
(geschützte virtuelle Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
[virtual]
gibt die maximale Anzahl von ExternT -Zeichen zurück, die in ein einzelnes InternT -Zeichen konvertiert werden könnten
(geschützte virtuelle Elementfunktion von std::codecvt<InternT,ExternT,StateT> )

Geerbt von std:: codecvt_base

Geschachtelter Typ Definition
enum result { ok, partial, error, noconv } ; Unbegrenzter Aufzählungstyp
Aufzählungskonstante Definition
ok Konvertierung wurde ohne Fehler abgeschlossen
partial nicht alle Quellzeichen wurden konvertiert
error ungültiges Zeichen angetroffen
noconv keine Konvertierung erforderlich, Eingabe- und Ausgabetypen sind identisch

Beispiel

Dieses Beispiel demonstriert das Lesen einer GB18030-kodierten Datei unter Verwendung der codecvt-Facette aus einem GB18030-fähigen Locale.

#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 'ß', U+00df
                                 "\xcb\xae"          // CJK ideogram '水' (water), U+6c34
                                 "\x94\x32\xbc\x35"; // musical sign '𝄋' (segno), U+1d10b
    std::wifstream fin("text.txt");
    fin.imbue(std::locale(fin.getloc(),
              new std::codecvt_byname<wchar_t, char, std::mbstate_t>("zh_CN.gb18030")));
    for (wchar_t c; fin.get(c);)
        std::cout << std::hex << std::showbase << static_cast<unsigned>(c) << '\n';
}

Mögliche Ausgabe:

0x7a
0xdf
0x6c34
0x1d10b

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 21 C++98 die Standardbibliothek musste keine
std::codecvt_byname Spezialisierungen bereitstellen
zwei Spezialisierungen sind erforderlich

Siehe auch

Konvertiert zwischen Zeichenkodierungen, einschließlich UTF-8, UTF-16, UTF-32
(Klassentemplate)