Bonjour,

Malgré les bribes d'informations que je lis ci et là, j'ai du mal a cerner la différence exacte entre le sdt::wstring et le Glib::ustring.

lorsque je code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
std::wstring ch1 = L"aeé";
Glib::ustring ch2 = "aeé";
std::cout << std::hex << ch1[2] << std::endl;
std::cout << ch2[2] << std::endl;
Tout les deux me répondent le code hexa unicode du 'é': e9.

Pourtant je croyais que ustring était spécialiste de l'utf-8 (chez moi tout est utf-8: système, éditeur et console) donc je m'attendais plutôt, mais je suis peut-être à côté de la plaque, qu'il me réponde c3a9.
D'autre part, j'ai cru comprendre que le wstring ne gérait que des caractères à taille fixe, qu'il lisait un caractère tout les 1, 2, 3 ou 4 octets à chaque fois, mais pas un mélange. Or mon éditeur étant utf-8, dans "aeé" je vois 1 octet, 1 octet et 4 octets (je suis sous linux, je compile avec gcc 4.2.2). Pourtant wstring n'a pas l'air déstabilisé lorsque je lui demande de sortir le 3ime caractère de la chaîne.

En attendant je suis embêté par ce que la seule façon de voire s'afficher un 'é' sur ma console de sortie semble de lui envoyer c3a9. Je pensais que Glib::ustring en était capable, mais visiblement non.
Même
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
std::cout << ch2 << std::endl
se termine par un échec:
terminate called after throwing an instance of 'Glib::ConvertError'
Abandon
Pour l'instant je vois seulement std::string capable de m'envoyer ces octets tel quel et de m'afficher un 'é' correcte, seulement avec un string je ne peut pas extraire des caractères individuellement.


Comme vous le voyez, mon esprit est très embrouillé sur ces notions, et malheureusement, sur ce point précis, internet ne regorge pas d'informations détaillés et accessibles.
Alors j'ai espoir que quelqu'un par ici se donnera la peine d'éclaircir mes idées.

D'avance merci.