std::codecvt_byname
| 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) |
| (Destruktor) |
Zerstört eine codecvt_byname Facette(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 = 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>) | |
ruft do_in auf(public member function of std::codecvt<InternT,ExternT,StateT>) | |
ruft do_unshift auf(public member function of std::codecvt<InternT,ExternT,StateT>) | |
ruft do_encoding auf(public member function of std::codecvt<InternT,ExternT,StateT>) | |
ruft do_always_noconv auf(public member function of std::codecvt<InternT,ExternT,StateT>) | |
ruft do_length auf(public member function of std::codecvt<InternT,ExternT,StateT>) | |
ruft do_max_length auf(public member function of std::codecvt<InternT,ExternT,StateT>) |
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>) |
| [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>) |
| [virtuell] |
erzeugt die Abschlusszeichenfolge von ExternT-Zeichen für eine unvollständige Konvertierung(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) |
| [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>) |
| [virtuell] |
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>) |
| [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>) |
| [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>) |
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 keinestd::codecvt_byname Spezialisierungen bereitstellen |
zwei Spezialisierungen sind erforderlich |
[edit] Siehe auch
| konvertiert zwischen Zeichenkodierungen, einschließlich UTF-8, UTF-16, UTF-32 (Klassentemplate) |