Bonjour tout le monde,

J'ai pas beaucoup d'expérience pour les encodages. Pour expérimenter, j'ai écrit le code suivant:

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;
}
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
 
First line: plain text.
deuxième ligne: des accents ici et là...
ça donne

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
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