Historique des modifications - Message

Message #9889

Sujet: Lire des fichiers Unicodes


TypeDateAuteurContenu
Dernière modification15-03-2011 10:06:03Metallizer
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'avancesmile
Création du message15-03-2011 10:05:26Metallizer
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'avancesmile

Retour

OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
94 invités en ligne
membre en ligne: -
RSS Feed