Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: getline(fichier,contenu) utf8  (Lu 1202 fois)

0 Membres et 1 Invité sur ce sujet

Blanchemain

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
    • E-mail
getline(fichier,contenu) utf8
« le: Décembre 04, 2019, 12:15:51 pm »
Bonjour
J'ai un fichier qui contient ceci:

Fichier
Nouvelle session
Ouvrir
Enregistrer
Enregistrer sous
Commentaire
Quitter
Éditer
Annuler
Rétablir
Couper
Copier
Coller
Préférences
 

Lorsque je fais :

 ifstream fichier(fichierLang, ios::in);                      // ouverture du fichier parametres.conf
 string contenu;
 if(fichier){                                                 // si l'ouverture a réussi
    int k=42;
    getline(fichier,contenu);
    menuItems[0][0].setFont(font);
    menuItems[0][0].setString(contenu);
    menuItems[0][0].setCharacterSize(13);
    menuItems[0][0].setPosition(sf::Vector2f(6, 8));
    menuItems[0][0].setFillColor(sf::Color(0,0,0));
    for(int i=1;i<7;i++){
       getline(fichier,contenu);
       menuItems[0][i].setFont(font);
       menuItems[0][i].setString(contenu);
       menuItems[0][i].setCharacterSize(13);
       menuItems[0][i].setPosition(sf::Vector2f(6,k ));
       menuItems[0][i].setFillColor(sf::Color(0,0,0));
       k=k+28;
    }
    k=42;
    getline(fichier,contenu);
    menuItems[1][0].setFont(font);
    menuItems[1][0].setString(sf::String::toUtf8(contenu));
    menuItems[1][0].setCharacterSize(13);
    menuItems[1][0].setPosition(sf::Vector2f(60, 8));
    menuItems[1][0].setFillColor(sf::Color(0,0,0));
    for(int i=1;i<7;i++){
       getline(fichier,contenu);
       menuItems[1][i].setFont(font);
       menuItems[1][i].setString(contenu);
       menuItems[1][i].setCharacterSize(13);
       menuItems[1][i].setPosition(sf::Vector2f(60,k ));
       menuItems[1][i].setFillColor(sf::Color(0,0,0));
       k=k+28;
    }
               
  }else{  // sinon
       cerr << "Erreur à l'ouverture du fichier Lang!" << endl;
  }
 

la variable sf::Text menuItems[1][0] me retourne des signes cabalistiques pour le caractère accentué d'Éditer.
C'est un problèmes de conversions, mais je ne vois pas comment faire (après plein de tentatives)!!!
« Modifié: Décembre 04, 2019, 02:25:32 pm par Laurent »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re: getline(fichier,contenu) utf8
« Réponse #1 le: Décembre 04, 2019, 02:32:41 pm »
Tu es sûr que ton code compile en l'état ? sf::String::toUtf8(contenu) est incorrect, c'est sf::String::fromUtf8 qu'il faut utiliser.

Ensuite, il faut bien sûr que ton fichier soit encodé en UTF-8, et peut-être même le flux (pas sûr). Lorsque c'est comme ça, au lieu d'essayer plein de choses un peu au hasard, regarde au debugger ou sur la sortie standard les valeurs des octets lus, ça te permettra d'en déduire si l'encodage est bon ou pas (par exemple, 'é' s'encode 0xC3 0xA9 en UTF-8, mais 0xE9 en Latin-1, etc.).

PS : attention aux règles du forum (double-post, mauvaise section, formattage du post, ...) ;)
« Modifié: Décembre 04, 2019, 02:36:03 pm par Laurent »
Laurent Gomila - SFML developer

Blanchemain

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
    • E-mail
Re: getline(fichier,contenu) utf8
« Réponse #2 le: Décembre 04, 2019, 05:02:54 pm »
Oui, le double poste, une erreur par confusion d'intitulé. Désolé.