C++ : Caractères spéciaux et fichiers .txt

Zariel -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je voudrais, si possible, que l'on m'aide sur un point. A vrai dire je suis en train de créer un programme et j'ai besoin à un moment de stocker ce qui se trouve dans string, dans un fichier. Le problème est que les accents ne sont pas stocker correctement dans le fichier .txt.

Voici le code que j'ai fait pour tester différentes solutions.

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;


int main()
{
	string monString = "Là tu fais le bébé ça ne va pas";
	
	ofstream fichier("fichiertest.txt", ios::out | ios::trunc);
	
	fichier << monString;
	
	fichier.close();
}


Bien entendu je ne post pas ici alors que je n'ai pas cherché. J'ai essayé pendant des heures de trouver une solution sur le net mais rien de satisfaisant. Donc si quelqu'un pourrait modifier le code que j'ai mis ci-dessus pour que ce qui apparaisse dans le fichier soit bien "Là tu fais le bébé ça ne va pas", et pas "L?+ tu fais le b?©b?© ?ßa ne va pas", je lui en serais fort reconnaissant. :)

Sinon si vous ne pouvez pas m'aider (même si vous pouvez d'ailleurs), merci à vous d'avoir lu mon post. :)

3 réponses

  1. Allen1210 Messages postés 430 Statut Membre 64
     
    As tu essayer de faire la lecture DANS TON PROGRAMME? Souvent les flux d'écriture et de lecture utilise un "code" de cryptage pour reconnaitre tous les caractères. Ainsi, la lecture dans le programme devrais être correcte. Sinon, il doit surement exister une option ou une autre méthode que celle que tu prend pour écrire normalement dans un fichier texte.
    0
  2. Zariel
     
    Qu'entends-tu par "lecture dans le programme" ?
    0
    1. Allen1210 Messages postés 430 Statut Membre 64
       
      Le code que tu as montré est un code d'écriture. Il existe un code probablement semblable où tu peut faire la lecture de ton fichier.
      0
    2. Zariel
       
      Oui, avec ifstream. Mais plus tôt dans mon programme en fait j'extrais le contenu d'un fichier contenant une réponse XML, contenant des accents. Mais dans ce cas là, tout à l'air de fonctionner correctement. Donc la lecture parait bonne mais le problème vient, on dirait, de l'écriture.
      0
  3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Salut.
    Je pense que pour gérer correctement les caractères accentués, il vau mieux utiliser wstring que string https://en.cppreference.com/w/cpp/string .
    string est fait pour l'ASCII.
    0
    1. Zariel
       
      Le problème snipeur, c'est que le string que j'ai là, en fait je fais tout un traitement avant dessus pour l'obtenir, du coup si j'utilise wstring il faut que je recode entièrement le traitement en question.
      0
    2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      C'est pas clair. Je ne vois pas pourquoi tu devrais tout recoder sous prétexte que tu change le type de ta variable ?
      Le problème des caractères accentués, c'est qu'il y a plusieurs normes de codage qui ont à peu près d'égale importance (ISO8... et UTF-...)
      0
    3. Zariel
       
      Don si je comprends bien, je garde ma variable de type string, je la transforme en wstring, et là j'écris dans mon fichier?
      0
    4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      non, tu fait tout depuis le début avec wstring.
      enfin, ça manque de code source pour être entièrement affirmatif.
      0
    5. Zariel
       
      J'ai essayé mais ça ne m'affiche toujours pas les bons caractères, genre le "é" devient un "È".
      0