std:: text_encoding
|
Definiert im Header
<text_encoding>
|
||
|
struct
text_encoding
;
|
(seit C++26) | |
Die Klasse
text_encoding
bietet einen Mechanismus zur Identifizierung von Zeichenkodierungen. Sie wird verwendet, um die
gewöhnliche Zeichenliteral-Kodierung
der Übersetzungsumgebung zur Kompilierzeit und die Zeichenkodierung der Ausführungsumgebung zur Laufzeit zu bestimmen.
Jedes
text_encoding
-Objekt kapselt ein
Zeichenkodierungsschema
, das eindeutig durch einen Enumerator in
text_encoding::id
und einen entsprechenden Namen, dargestellt durch einen nullterminierten Byte-String, identifiziert wird. Diese können über die
mib()
- bzw.
name()
-Memberfunktionen abgerufen werden. Die Bestimmung, ob ein Objekt ein Zeichenkodierungsschema repräsentiert, das in der Übersetzungs- oder Ausführungsumgebung implementiert ist, ist implementierungsdefiniert.
Die Klasse
text_encoding
ist ein
TriviallyCopyable
-Typ. Das Array-Objekt, das den entsprechenden Namen des Zeichenkodierungsschemas repräsentiert, ist
innerhalb des
text_encoding
-Objekts selbst
verschachtelt
. Der gespeicherte Name ist auf maximal
max_name_length
Zeichen exklusive des Nullzeichens
'
\0
'
begrenzt.
Die Klasse unterstützt sowohl registrierte als auch nicht-registrierte Zeichenkodierungen. Registrierte Kodierungen sind jene, die im IANA Character Sets Registry zu finden sind, mit Ausnahme der folgenden Zeichenkodierungen:
- NATS-DANO (33)
- NATS-DANO-ADD (34).
Darüber hinaus bietet die Klasse Zugriff auf registrierte Zeichenkodierungen für:
- Primary name : Der offizielle Name, der im Registry angegeben ist.
- Aliases : Eine implementierungsdefinierte Obermenge von Aliasnamen aus dem Registry.
- MIBenum value : Ein eindeutiger Identifikator zur Identifizierung von codierten Zeichensätzen.
Nicht registrierte Kodierungen können mit einem Enumerator id :: other oder id :: unknown und einem benutzerdefinierten Namen dargestellt werden.
Ein
text_encoding
-Objekt
e
, dessen MIBenum-Wert weder
id
::
other
noch
id
::
unknown
ist, erhält die folgenden Invarianten aufrecht:
- * e. name ( ) ! = ' \0 ' ist true , und
- e. mib ( ) == std:: text_encoding ( e. name ( ) ) . mib ( ) ist true .
Inhaltsverzeichnis |
Mitgliedertypen
|
repräsentiert den MIBenum-Wert der Zeichenkodierung
(öffentliches Mitglieds-Enum) |
|
eine
view
über Aliase der Zeichenkodierung
(öffentliche Mitgliedsklasse) |
Memberkonstante
| Name | Wert |
|
constexpr
std::
size_t
max_name_length
[static]
|
63
(öffentliche statische Member-Konstante) |
Datenmitglieder
| Mitglied | Beschreibung |
std
::
text_encoding
::
id
mib_
(privat)
|
ein MIBenum-Wert mit
id
::
unknown
als Standardwert
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
char
[
max_name_length
+
1
]
name_
(privat)
|
ein gespeicherter Primärname
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
Memberfunktionen
Erstellung |
|
konstruiert neues
text_encoding
Objekt
(öffentliche Elementfunktion) |
|
|
[static]
|
konstruiert ein neues
text_encoding
das die
gewöhnliche Zeichenliteral-Kodierung
repräsentiert
(öffentliche statische Elementfunktion) |
|
[static]
|
konstruiert ein neues
text_encoding
das die implementierungsdefinierte Zeichenkodierungsschemata der Ausführungsumgebung repräsentiert
(öffentliche statische Elementfunktion) |
Beobachter |
|
|
gibt den MIBenum-Wert der aktuellen Zeichenkodierung zurück
(öffentliche Elementfunktion) |
|
|
gibt den primären Namen der aktuellen Zeichenkodierung zurück
(öffentliche Elementfunktion) |
|
gibt eine
view
über Aliase der aktuellen Zeichenkodierung zurück
(öffentliche Elementfunktion) |
|
|
[static]
|
prüft das Zeichenkodierungsschema der Ausführungsumgebung mit dem angegebenen MIB-Wert
(öffentliche statische Elementfunktion) |
Hilfsfunktionen |
|
|
[static]
(private)
|
vergleicht zwei Aliasnamen unter Verwendung von
Charset Alias Matching
( nur zur Darstellung verwendete statische Elementfunktion* ) |
Nicht-Member-Funktionen
|
(C++26)
|
vergleicht zwei
text_encoding
Objekte.
(öffentliche Elementfunktion) |
Hilfsklassen
|
(C++26)
|
Hash-Unterstützung für
std::text_encoding
(Klassen-Template-Spezialisierung) |
Hinweise
Bei der Arbeit mit Zeichenkodierungen ist es wichtig zu beachten, dass die primären Namen oder Aliase von zwei verschiedenen registrierten Zeichenkodierungen nicht äquivalent sind, wenn sie unter Verwendung von Charset Alias Matching verglichen werden, wie im Unicode Technical Standard beschrieben.
Der Einfachheit halber werden die Enumeratoren von
text_encoding::id
als Mitglieder von
text_encoding
eingeführt und können direkt zugegriffen werden. Das bedeutet, dass
text_encoding
::
ASCII
und
text_encoding
::
id
::
ASCII
auf dieselbe Entität verweisen.
Es wird empfohlen, dass die Implementierung registrierte Kodierungen als nicht austauschbar behandelt. Zusätzlich sollte der primäre Name einer registrierten Kodierung nicht verwendet werden, um eine ähnliche, aber unterschiedliche nicht-registrierte Kodierung zu beschreiben, es sei denn, es gibt einen klaren Präzedenzfall dafür.
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_text_encoding
|
202306L
|
(C++26) |
std::text_encoding
|
Beispiel
#include <locale> #include <print> #include <text_encoding> int main() { // literal encoding is known at compile-time constexpr std::text_encoding literal_encoding = std::text_encoding::literal(); // check for literal encoding static_assert(literal_encoding.mib() != std::text_encoding::other && literal_encoding.mib() != std::text_encoding::unknown); // environment encoding is only known at runtime std::text_encoding env_encoding = std::text_encoding::environment(); // associated encoding of the default locale std::text_encoding locale_encoding = std::locale("").encoding(); std::println("The literal encoding is {}", literal_encoding.name()); std::println("The aliases of literal encoding:"); for (const char* alias_name : literal_encoding.aliases()) std::println(" -> {}", alias_name); if (env_encoding == locale_encoding) std::println("Both environment and locale encodings are the same"); std::println("The environment encoding is {}", env_encoding.name()); std::println("The aliases of environment encoding:"); for (const char* alias_name : env_encoding.aliases()) std::println(" -> {}", alias_name); }
Mögliche Ausgabe:
The literal encoding is UTF-8 The aliases of literal encoding: -> UTF-8 -> csUTF8 Both environment and locale encodings are the same The environment encoding is ANSI_X3.4-1968 The aliases of environment encoding: -> US-ASCII -> iso-ir-6 -> ANSI_X3.4-1968 -> ANSI_X3.4-1986 -> ISO_646.irv:1991 -> ISO646-US -> us -> IBM367 -> cp367 -> csASCII -> ASCII
Siehe auch
|
Menge polymorpher Facetten, die kulturelle Unterschiede kapseln
(Klasse) |