Gtkmm: problème encodage utf-8
Bonjour tout le monde,
J'ai pas beaucoup d'expérience pour les encodages. Pour expérimenter, j'ai écrit le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
#include <giomm.h>
#include <iostream>
#include <glibmm.h>
#include <string>
int main(int argc, char** argv)
{
Glib::init();
Gio::init();
if(argc!=2) return 1;
//open a file to read
Glib::RefPtr<Gio::File> file=Gio::File::create_for_path(argv[1]);
Glib::RefPtr<Gio::DataInputStream> fin=Gio::DataInputStream::create(file->read());
std::string line;
//try to read.
try{
int i=1;
while(fin->read_line(line)){
std::cout<<i<<": tel-quel: \""
<<line<<"\""<<std::endl;
std::cout<<i<<": avec Glib::ustring: \""
<<Glib::ustring(line)<<"\""<<std::endl;
++i;
}
} catch(Glib::ConvertError error){
std::cout<<std::endl<<"Glib::ConvertError: "<<error.what()<<std::endl;
}
return 0;
} |
Si je donne à ce programme le fichier suivant encodé en utf-8:
Code:
1 2 3
|
First line: plain text.
deuxième ligne: des accents ici et là... |
ça donne
Code:
1 2 3 4 5 6
|
1: tel-quel: "First line: plain text."
1: avec Glib::ustring: "First line: plain text."
2: tel-quel: "deuxième ligne: des accents ici et là..."
2: avec Glib::ustring: "
Glib::ConvertError: Invalid byte sequence in conversion input |
mon "locale" (sous linux) utilise l'utf-8 (fr_CH), c'est pour ça que la sortie
console toute simple avec des std::string fonctionne sans problèmes.
La question est: Comment importer le contenu d'un fichier (encodage quelconque mais connu à l'avance) dans un ustring?
Je développe une application pour jouer au go, les caractères asiatiques doivent absolument être pris en charge...
Merci
Bastien