Quelle est la manière correcte de lire les fichiers Unicode ligne par ligne en C++? J'essaie de lire un fichier enregistré en tant qu'unicode (LE) par le bloc-notes de Windows. Supposons que le fichier contienne simplement les caractères A et B sur des lignes séparées.Lecture de fichiers Unicode ligne par ligne C++
À la lecture de l'octet de fichier par octet, je vois la séquence d'octet suivant (hex):
FE FF 41 00 0D 00 0A 00 42 00 0D 00 0A 00
So 2 octets BOM, 2 octets "A", 2 octets CR, 2 octets LF, 2 octets "B", 2 octets CR, 2 octets LF.
J'ai essayé de lire le fichier texte en utilisant le code suivant:
std::wifstream file("test.txt");
file.seekg(2); // skip BOM
std::wstring A_line;
std::wstring B_line;
getline(file,A_line); // I get "A"
getline(file,B_line); // I get "\0B"
-je obtenir les mêmes résultats en utilisant >> opérateur au lieu de getline
file >> A_line;
file >> B_line;
Il semble que le caractère CR seul octet est est consommé uniquement sous la forme d'un octet unique. ou CR NULL LF est en cours de consommation mais pas le haut octet NULL. Je m'attendrais à ce que wifstream en mode texte lise le 2 octets CR et 2 octets LF.
Qu'est-ce que je fais mal? Il ne semble pas correct que l'on doive lire un fichier texte octet par octet en mode binaire juste pour analyser les nouvelles lignes.