std:: text_encoding
|
Défini dans l'en-tête
<text_encoding>
|
||
|
struct
text_encoding
;
|
(depuis C++26) | |
La classe
text_encoding
fournit un mécanisme pour identifier les encodages de caractères. Elle est utilisée pour déterminer
l'encodage des littéraux de caractères ordinaires
de l'environnement de traduction au moment de la compilation et l'encodage des caractères de l'environnement d'exécution au moment de l'exécution.
Chaque
text_encoding
encapsule un
schéma d'encodage de caractères
, identifié de manière unique par un énumérateur dans
text_encoding::id
et un nom correspondant représenté par une chaîne d'octets terminée par un caractère nul. Ceux-ci peuvent être accédés respectivement via les fonctions membres
mib()
et
name()
. La détermination du fait qu'un objet représente un schéma d'encodage de caractères implémenté dans l'environnement de traduction ou d'exécution est définie par l'implémentation.
La classe
text_encoding
est un type
TriviallyCopyable
. L'objet tableau représentant le nom correspondant du schéma d'encodage des caractères est
imbriqué dans
l'objet
text_encoding
lui-même. Le nom stocké est limité à un maximum de
max_name_length
caractères, à l'exclusion du caractère nul
'
\0
'
.
La classe prend en charge à la fois les encodages de caractères enregistrés et non enregistrés. Les encodages enregistrés sont ceux que l'on trouve dans le Registre des jeux de caractères de l'IANA à l'exclusion des encodages de caractères suivants :
- NATS-DANO (33)
- NATS-DANO-ADD (34).
De plus, la classe fournit un accès aux encodages de caractères enregistrés pour :
- Primary name : Le nom officiel spécifié dans le registre.
- Aliases : Un sur-ensemble défini par l'implémentation des alias provenant du registre.
- MIBenum value : Un identifiant unique utilisé pour identifier les encodages de caractères codés.
Les encodages non enregistrés peuvent être représentés avec un énumérateur id :: other ou id :: unknown et un nom personnalisé.
Un objet
text_encoding
e
dont la valeur MIBenum n'est ni
id
::
other
ni
id
::
unknown
maintient les invariants suivants :
- * e. name ( ) ! = ' \0 ' est true , et
- e. mib ( ) == std:: text_encoding ( e. name ( ) ) . mib ( ) est true .
Table des matières |
Types membres
|
représente la valeur MIBenum de l'encodage de caractères
(membre énumération public) |
|
une
view
sur les alias de l'encodage de caractères
(classe membre public) |
Constante membre
| Nom | Valeur |
|
constexpr
std::
size_t
max_name_length
[static]
|
63
(constante de membre public static) |
Membres de données
| Membre | Description |
std
::
text_encoding
::
id
mib_
(privé)
|
une valeur MIBenum avec
id
::
unknown
comme valeur par défaut
( objet membre d'exposition uniquement* ) |
char
[
max_name_length
+
1
]
name_
(privé)
|
un nom principal stocké
( objet membre d'exposition uniquement* ) |
Fonctions membres
Création |
|
construit un nouvel objet
text_encoding
(fonction membre publique) |
|
|
[static]
|
construit un nouveau
text_encoding
représentant l'
encodage des littéraux de caractères ordinaires
(fonction membre statique publique) |
|
[static]
|
construit un nouveau
text_encoding
représentant le schéma d'encodage de caractères défini par l'implémentation de l'environnement d'exécution
(fonction membre statique publique) |
Observateurs |
|
|
retourne la valeur MIBenum de l'encodage de caractères actuel
(fonction membre publique) |
|
|
retourne le nom principal de l'encodage de caractères actuel
(fonction membre publique) |
|
retourne une
view
sur les alias de l'encodage de caractères actuel
(fonction membre publique) |
|
|
[static]
|
vérifie le schéma d'encodage de caractères de l'environnement d'exécution avec la valeur MIB spécifiée
(fonction membre statique publique) |
Utilitaires |
|
|
[static]
(private)
|
compare deux noms d'alias en utilisant le
Charset Alias Matching
( fonction membre statique exposition-only* ) |
Fonctions non membres
|
(C++26)
|
compare deux objets
text_encoding
.
(fonction membre publique) |
Classes d'assistance
|
(C++26)
|
Prise en charge du hachage pour
std::text_encoding
(spécialisation de modèle de classe) |
Notes
Lorsque l'on travaille avec les encodages de caractères, il est important de noter que les noms principaux ou les alias de deux encodages de caractères distincts enregistrés ne sont pas équivalents lorsqu'ils sont comparés en utilisant Charset Alias Matching tel que décrit par le Standard Technique Unicode.
Pour plus de commodité, les énumérateurs de
text_encoding::id
sont introduits en tant que membres de
text_encoding
et peuvent être accédés directement. Cela signifie que
text_encoding
::
ASCII
et
text_encoding
::
id
::
ASCII
font référence à la même entité.
Il est recommandé que l'implémentation traite les encodages enregistrés comme non interchangeables. De plus, le nom principal d'un encodage enregistré ne devrait pas être utilisé pour décrire un encodage non enregistré similaire mais différent, à moins qu'il n'existe un précédent clair pour le faire.
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_text_encoding
|
202306L
|
(C++26) |
std::text_encoding
|
Exemple
#include <locale> #include <print> #include <text_encoding> int main() { // l'encodage littéral est connu à la compilation constexpr std::text_encoding literal_encoding = std::text_encoding::literal(); // vérification de l'encodage littéral static_assert(literal_encoding.mib() != std::text_encoding::other && literal_encoding.mib() != std::text_encoding::unknown); // l'encodage de l'environnement n'est connu qu'à l'exécution std::text_encoding env_encoding = std::text_encoding::environment(); // encodage associé à la locale par défaut 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); }
Sortie possible :
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
Voir aussi
|
ensemble de facettes polymorphes qui encapsulent les différences culturelles
(classe) |