Historique des modifications - Message

Message #9889

Sujet: Lire des fichiers Unicodes


Type Date Auteur Contenu
Dernière modification 15-03-2011 10:06:03 Metallizer
Salut à tous,

Je vous expose mon problème en espérant que des pros de la lecture de fichiers puissent m'aiguiller !

Je souhaite lire un fichier de traduction des textes de mon jeu, il a un format très simple :

identifiant1=texte1
identifiant2=texte2
etc...

Du coup j'ai une classe Translation avec une méthode loadTextData qui s'occupe d'ouvrir le fichier, de lire caractère par caractère puis de stocker les traductions dans une map définie telle que :

Code c++ :

typedef map<core::stringc, core::stringw> translationMap;


Notez bien le stringw utilisé pour que les chaînes unicode soient gérées.

Seulement voila, j'ai beau lire et relire mon code, je ne vois pas ce qui cloche. J'affiche toujours dans la console des adresses mémoire au lieu du texte. Pourtant, si je change le stringw en stringc, mon texte s'affiche bien (mais mal encodé si il y a des caractères accentués).

Code c++ :

void Translation::loadTextData(const core::stringc& fullPath) {
  wifstream textFile(fullPath.c_str(), ios::in);
  if(textFile) {
    wchar_t currentChar;
    bool inTextIdentifier = true;
    bool inTextValue = false;
    core::stringc identifier = "";
    core::stringw value = L"";

    while(textFile.get(currentChar)) {
      if(currentChar == '\
' || currentChar == '\
') {
        // Ici, la console affiche : "translation added: test = 0x22cc0c0" :(
        cout << "translation added: " << identifier.c_str() << " = " << value.c_str() << endl;
        textData[identifier] = value;
        identifier = "";
        value = L"";
        inTextValue = false;
        inTextIdentifier = true;
      }
      if(inTextValue) {
        value.append(currentChar);
      }
      if(inTextIdentifier) {
        if(currentChar == '=') {
          // Passage de l'identifiant a la valeur
          inTextIdentifier = false;
          inTextValue = true;
        } else {
          identifier.append(currentChar);
        }
      }
    }
    textFile.close();
  }
}


Donc si quelqu'un a déjà rencontré des problèmes de ce type avec stringw, je suis toute ouïe. Merci d'avance smile
Création du message 15-03-2011 10:05:26 Metallizer
Salut à tous,

Je vous expose mon problème en espérant que des pros de la lecture de fichiers puissent m'aiguiller !

Je souhaite lire un fichier de traduction des textes de mon jeu, il a un format très simple :

identifiant1=texte1
identifiant2=texte2
etc...

Du coup j'ai une classe Translation avec une méthode loadTextData qui s'occupe d'ouvrir le fichier, de lire caractère par caractère puis de stocker les traductions dans une map définie telle que :

Code c++ :

typedef map<core::stringc, core::stringw> translationMap;


Notez bien le stringw utilisé pour que les chaînes unicode soient gérées.

Seulement voila, j'ai beau lire et relire mon code, je ne vois pas ce qui cloche. J'affiche toujours dans la console des adresses mémoire au lieu du texte. Pourtant, si je change le stringw en stringc, mon texte s'affiche bien (mais mal encodé si il y a des caractères accentués).

Code c++ :

void Translation::loadTextData(const core::stringc& fullPath) {
  wifstream textFile(fullPath.c_str(), ios::in);
  if(textFile) {
    wchar_t currentChar;
    bool inTextIdentifier = true;
    bool inTextValue = false;
    core::stringc identifier = "";
    core::stringw value = L"";

    while(textFile.get(currentChar)) {
      if(currentChar == '\
' || currentChar == '\
') {
        // Ici, la console affiche : "translation added: test = 0x22cc0c0" :(
        cout << "translation added: " << identifier.c_str() << " = " << value.c_str() << endl;
        textData[identifier] = value;
        identifier = "";
        value = L"";
        inTextValue = false;
        inTextIdentifier = true;
      }
      if(inTextValue) {
        value.append(currentChar);
      }
      if(inTextIdentifier) {
        if(currentChar == '=') {
          // Passage de l'identifiant a la valeur
          inTextIdentifier = false;
          inTextValue = true;
        } else {
          identifier.append(currentChar);
        }
      }
    }
    textFile.close();
  }
}


Donc si quelqu'un a déjà rencontré des problèmes de ce type avec stringw, je suis toute ouïe. Merci d'avance smile

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
118 invités en ligne
membre en ligne: -
RSS Feed