Namespaces
Variants

std:: codecvt_mode

From cppreference.net
Défini dans l'en-tête <codecvt>
enum codecvt_mode {

consume_header = 4 ,
generate_header = 2 ,
little_endian = 1

} ;
(depuis C++11)
(obsolète en C++17)
(supprimé en C++26)

Les facettes std::codecvt_utf8 , std::codecvt_utf16 , et std::codecvt_utf8_utf16 acceptent une valeur optionnelle de type std::codecvt_mode comme argument de template, qui spécifie les fonctionnalités optionnelles de la conversion de chaîne unicode.

Constantes

Défini dans l'en-tête <locale>
Énumérateur Signification
little_endian suppose que l'entrée est en ordre des octets petit-boutiste (s'applique uniquement à l'entrée UTF-16, l'ordre par défaut est gros-boutiste)
consume_header consomme la marque d'ordre des octets, si présente au début de la séquence d'entrée, et (dans le cas d'UTF-16) s'appuie sur l'ordre des octets qu'elle spécifie pour décoder le reste de l'entrée
generate_header génère la marque d'ordre des octets au début de la séquence de sortie

Les marques d'ordre des octets reconnues sont :

0xfe 0xff UTF-16 big-endian
0xff 0xfe UTF-16 little-endian
0xef 0xbb 0xbf UTF-8 (aucun effet sur l'endianité)

Si std::consume_header n'est pas sélectionné lors de la lecture d'un fichier commençant par une marque d'ordre des octets, le caractère Unicode U+FEFF (espace insécable de largeur nulle) sera lu comme premier caractère du contenu de la chaîne.

Exemple

L'exemple suivant illustre la consommation du BOM UTF-8 :

#include <codecvt>
#include <cwchar>
#include <fstream>
#include <iostream>
#include <locale>
#include <string>
int main()
{
    // UTF-8 data with BOM
    std::ofstream{"text.txt"} << "\ufeffz\u6c34\U0001d10b";
    // read the UTF-8 file, skipping the BOM
    std::wifstream fin{"text.txt"};
    fin.imbue(std::locale(fin.getloc(),
                          new std::codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>));
    for (wchar_t c; fin.get(c);)
        std::cout << std::hex << std::showbase << (std::wint_t)c << '\n';
}

Sortie :

0x7a
0x6c34
0x1d10b

Voir aussi

convertit entre les encodages de caractères, y compris UTF-8, UTF-16, UTF-32
(modèle de classe)
(C++11) (déprécié en C++17) (supprimé en C++26)
convertit entre UTF-8 et UCS-2/UCS-4
(modèle de classe)
(C++11) (déprécié en C++17) (supprimé en C++26)
convertit entre UTF-16 et UCS-2/UCS-4
(modèle de classe)
(C++11) (déprécié en C++17) (supprimé en C++26)
convertit entre UTF-8 et UTF-16
(modèle de classe)