Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Blanchemain le Décembre 04, 2019, 12:15:51 pm

Titre: getline(fichier,contenu) utf8
Posté par: Blanchemain 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)!!!
Titre: Re: getline(fichier,contenu) utf8
Posté par: Laurent 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, ...) ;)
Titre: Re: getline(fichier,contenu) utf8
Posté par: Blanchemain le Décembre 04, 2019, 05:02:54 pm
Oui, le double poste, une erreur par confusion d'intitulé. Désolé.