I – L’Unicode ? Qu’est-ce donc ?
II – Avant Delphi 2009 ?
III – IDE
IV – La VCL
V – Le langage
VI – La compatibilité avec l’existant ?
VII – Conclusion
I – L’Unicode ? Qu’est-ce donc ?
L’Unicode est une norme qui permet de représenter n’importe quel caractère de n’importe quel langue en un identifiant numérique.
Ca ne vous rappelle rien ? Espace = 32, A = 65, B = 66, … La table ASCII ! enfin, oui et non, si vous vous souvenez bien, la table contient 255 caractères … et c’est là un problème dès que l’on sort de notre pays !
Comment faire tenir dans cette table l’alphabet francais, cyrillique, chinois, japonais ou encore hébreu ??? C’est tout simplement impossible.
Il y avait une solution : les pages codes, chaque lot de caractères était dans une page code différente (pour la france 850, …). Ca marchait très bien sauf que … une application conçu au Japon avait un rendu inattendu en France !
Pire, on ne pouvait pas avoir dans le même écran du Russe et de l’hébreu (certe c’est un exemple un peu extrème), bref un casse-tête dès que l’on commence à créer des applications pour l’international.
C’est là que l’Unicode est intéressant !
II – Avant Delphi 2009 ?
L’Unicode existe depuis longtemps. Il est même un peu faux de prétendre que les versions antérieures de Delphi ne gère pas l’Unicode, son exploitation se passait au travers du type widestring Bien que pour le code on pouvait utiliser le type widestring, on ne pouvait cependant pas afficher des caractères unicodes dans les VCL, il y a eu quelques composants comme les TMS Unicode(ex TNT Control) qui le permettait, et une tentative plutôt originale d’interception des appels API avec UTF8VCL, cette unité permet d’utiliser les VCL de base, et en temps réel, lors de l’exécution de votre programme.
III – IDE
Avant de parler des changements dans le langage, sachez que l’interface de Delphi aussi a eu le droit à son « unicodification » (excusez moi de ce néologisme, mais ce serait la définition la plus adéquate).
IV – La VCL
La VCL a complètement été retravaillée pour être compatible avec l’unicode, donc à la corbeille TNTControl et compagnie, au revoir l’instable et buggée utf8vcl…
Les TEdit, TMemo, TLabel sont désormais prêts pour l’international et ce, sans modification, un bon point.
V – Le langage
Le langage a subi de profondes modifications comme par exemple le Char est devenu WideChar et String en WideString.
Le bout de code suivant montre bien que l’unicode est par défaut :
proceduretest; var CharBuffer: array[0..100] of Char; AnsiCharBuffer: array[0..100] ofAnsiChar; WideCharBuffer: array[0..100] ofWideChar; begin showmessage(format('array[0..100] of Char : length = %d sizeof = %d', [length(charbuffer),sizeof(charBuffer)])); showmessage(format('array[0..100] of AnsiChar : length = %d sizeof = %d', [length(AnsiCharBuffer),sizeof(AnsiCharBuffer)])); showmessage(format('array[0..100] of WideChar : length = %d sizeof = %d', [length(WideCharBuffer),sizeof(WideCharBuffer)])); { ca retourne : array[0..100] of Char : length = 101 sizeof = 202 array[0..100] of AnsiChar : length = 101 sizeof = 101 array[0..100] of WideChar : length = 101 sizeof = 202 } end;
Il y a l’apparition un nouveau type : UnicodeString, utile pour clarifier le code
Delphi et l’UNICODE (444 KO) (Cours PDF)