Namensräume
Varianten
Aktionen

std::codecvt_byname

Von cppreference.com
< cpp‎ | locale
 
 
 
 
Definiert in Header <locale>
template< class InternT, class ExternT, class State >
class codecvt_byname : public std::codecvt<InternT, ExternT, State>;

std::codecvt_byname ist eine std::codecvt Facette, die Multibyte-/Wide-Character-Konvertierungsregeln einer bei der Konstruktion angegebenen Locale verkapselt.

Inhalt

[edit] Spezialisierungen

Die Standardbibliothek garantiert die Bereitstellung der folgenden Spezialisierungen

Definiert in 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 seit 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 seit 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> Lokale spezifische Konvertierung zwischen Wide-String- und Narrow-Zeichensätzen

[edit] Memberfunktionen

(Konstruktor)
Konstruiert eine neue codecvt_byname Facette
(public member function) [bearbeiten]
(Destruktor)
Zerstört eine codecvt_byname Facette
(protected member function) [bearbeiten]

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 eine neue std::codecvt_byname Facette für eine Locale mit dem Namen name.

refs wird für die Ressourcenverwaltung verwendet: Wenn refs = 0 ist, zerstört die Implementierung die Facettenklasse, wenn das letzte std::locale-Objekt, das sie hält, zerstört wird. Andernfalls wird das Objekt nicht zerstört.

Parameter

name - der Name der Locale
refs - die Anzahl der Referenzen, die auf die Facettenklasse verweisen

std::codecvt_byname::~codecvt_byname

protected:
~codecvt_byname();

Zerstört die Facettenklasse.

Abgeleitet von std::codecvt

Verschachtelte Typen

Typ Definition
intern_type internT
extern_type externT
state_type stateT

[edit] Datenmember

Mitglied Beschreibung
std::locale::id id [static] die Kennung des Facets

Memberfunktionen

ruft do_out auf
(public member function of std::codecvt<InternT,ExternT,StateT>) [edit]
ruft do_in auf
(public member function of std::codecvt<InternT,ExternT,StateT>) [edit]
ruft do_unshift auf
(public member function of std::codecvt<InternT,ExternT,StateT>) [edit]
ruft do_encoding auf
(public member function of std::codecvt<InternT,ExternT,StateT>) [edit]
ruft do_always_noconv auf
(public member function of std::codecvt<InternT,ExternT,StateT>) [edit]
ruft do_length auf
(public member function of std::codecvt<InternT,ExternT,StateT>) [edit]
ruft do_max_length auf
(public member function of std::codecvt<InternT,ExternT,StateT>) [edit]

Geschützte Memberfunktionen

[virtuell]
konvertiert eine Zeichenkette von InternT nach ExternT, z. B. beim Schreiben in eine Datei
(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) [edit]
[virtuell]
konvertiert eine Zeichenkette von ExternT nach InternT, z. B. beim Lesen aus einer Datei
(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) [edit]
[virtuell]
erzeugt die Abschlusszeichenfolge von ExternT-Zeichen für eine unvollständige Konvertierung
(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) [edit]
[virtuell]
gibt die Anzahl der ExternT-Zeichen zurück, die zur Erzeugung eines InternT-Zeichens erforderlich sind, falls diese konstant ist
(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) [edit]
prüft, ob das Facet eine Identitätskonvertierung für alle gültigen Argumentwerte kodiert
(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) [edit]
[virtuell]
berechnet die Länge der ExternT-Zeichenkette, die bei der Konvertierung in den gegebenen InternT-Puffer verbraucht würde
(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) [edit]
[virtuell]
gibt die maximale Anzahl von ExternT-Zeichen zurück, die in ein einzelnes InternT-Zeichen konvertiert werden könnten
(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) [edit]

Geerbt von std::codecvt_base

Verschachtelter Typ Definition
enum result { ok, partial, error, noconv }; Aufzählungstyp ohne Gültigkeitsbereich
Enumerationskonstante Definition
ok Die Konvertierung wurde ohne Fehler abgeschlossen.
partiell Nicht alle Quellzeichen wurden konvertiert.
error Ungültiges Zeichen angetroffen.
noconv Keine Konvertierung erforderlich, Eingabe- und Ausgabetypen sind identisch.

[edit] Beispiel

Dieses Beispiel zeigt das Lesen einer GB18030-kodierten Datei unter Verwendung der codecvt-Facette einer 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

[edit] Defect reports

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

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

[edit] Siehe auch

konvertiert zwischen Zeichenkodierungen, einschließlich UTF-8, UTF-16, UTF-32
(Klassentemplate) [bearbeiten]