Namespaces
Variants

std:: text_encoding

From cppreference.net
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 :

  1. Primary name : Le nom officiel spécifié dans le registre.
  2. Aliases : Un sur-ensemble défini par l'implémentation des alias provenant du registre.
  3. 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)
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

compare deux objets text_encoding .
(fonction membre publique)

Classes d'assistance

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)