Bonjour tout le monde,
J'ai pas beaucoup d'expérience pour les encodages. Pour expérimenter, j'ai écrit le code suivant:
Si je donne à ce programme le fichier suivant encodé en utf-8:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
ça donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 First line: plain text. deuxième ligne: des accents ici et là...
mon "locale" (sous linux) utilise l'utf-8 (fr_CH), c'est pour ça que la sortie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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
Partager