[Tuto] Autoit et UTF-8
Posté : jeu. 15 juil. 2010 23:37
Salutations,
Suite a ce sujet, je me suis dis qu'il serait bon de faire un point sur l'UTF-8 avec autoit.
Vous avez déja entendu parler de UTF-8, ou de ISO 8859-1 ou ISO 8859-15 voir d'unicode. Il s'agit de système d'encodage des textes, je ne m'attarde pas sur les détailles (Wikipédia le fait mieux ) mais en gros sachez que :
- ISO 8859-1 ou latin1 permet d'encoder une grande partie des caractères français, ISO 8859-15 corrige un peut le truc avec l'ajout de quelques caractères.
- ISO 10646 est un charset plus large permettant d'encoder presque tout les caractères du monde.
- Unicode reprend tout les caractères de ISO 10646, en les codant de manière plus puissante.
- UTF-8 est une facon de représenter Unicode.
En gros, l'ISO 8859-1 qui est très rependu chez nous, c'était bien, dans le temps ! Maintenant nos machines sont assez puissantes et ont assez de mémoire pour que l'UTF-8 ne mange rien ! De plus, on est de plus souvent amené a utiliser des caractères étrangers, comme le japonais ou certains noms propres. Unicode est donc presque indispensable pour un logiciel de ce nom !
http://www.autoitscript.fr/autoit3/docs ... nicode.htm
On nous recommande chaudement UTF-8 ! Innutile donc de se poser la question de savoir si Autoit le supportera
Attardez vous quand meme sur cette page pour les cas spécifiques (windows < 2000, Send, regexp, console (quoi que, ca on véra :p))
Aussi méga trop bien que semble UTF-8 apres tout ce que je viens de vous raconter, il s'avère que Scite utilise par défaut l'encodage ISO 8859-1... Au passage, d'expérience personnel, j'ai déjà eu de gros bugs dans des programmes pour avoir utilisé Scite pour des modifs rapides, a cause de l'encodage.
Pour changer l'encodage de la page courrante, vous pouvez faire "Fichier -> Encodage -> UTF8"
Pour changer l'encodage par défaut, il suffit de faire "Options > Open Global option file", de trouver la ligne qui parle d'unicode (CTRL+F) et de changer les ligne comme suit :Apres ca, votre Scite sera parfaitement calibré pour l'UTF-8 ! Attention toute foi, les code enregistrés e n ISO auront des petits bugs sur les caractères spéciaux !
C'est bien bô d'avoir un script en UTF-8, mais si on le compile sans instructions spécifique depuis Scite, il sera converti en ISO ! arf..
La solution est allors de passer le paramètre /unicode au compilateur, ce qui force la compilation en ligne de commande...
Je n'ai pas trouvé de directive pour AutoitWarper la dessus !
Sinon, sachez que le clic droit -> compiler est plus malin, et saura utiliser Unicode si il le faut !
ConsoleWrite() c'est vachement sympa pour communiquer avec le programme qui appel notre scripte, mais "Characters are converted to ANSI before being written." Ha ben merci ! C'est sympa !...
En fait, la console ne supporte que l'ANSI, donc on peut comprendre la conversion. Mais dans le cadre ou l'on utilise le flux de sorti pour envoyer des infos, c'est vraiment pas cool !
Une solution, un peu bricolée mais qui marche, on converti notre chaine en binaire avec le flag 4 pour bien convertir l'UTF-8, puis on décode du binaire vers String avec le flag 1, pour dire "c'est du ANSI promis juré !"
Du coup, on se retrouve avec notre chaine parfaitement écrite, mais autoit pense qu'il s'agit d'ANSI donc il l'envoi sans chercher a convertir !
exemple
Vu comment c'est la galère de passer en UTF-8, je vous conseil de laisser tomber si vous en avez pas besoin. Apres tout, j'ai passé 3ans avant que cela ne me bloque !
Mais si vous êtes joueurs, ou simplement curieux, ou bien obligé, alors j'espère qu'avec tout ca vous pourrez vous en sortir !
Suite a ce sujet, je me suis dis qu'il serait bon de faire un point sur l'UTF-8 avec autoit.
UTF-8, c'est quoi ?
Vous avez déja entendu parler de UTF-8, ou de ISO 8859-1 ou ISO 8859-15 voir d'unicode. Il s'agit de système d'encodage des textes, je ne m'attarde pas sur les détailles (Wikipédia le fait mieux ) mais en gros sachez que :
- ISO 8859-1 ou latin1 permet d'encoder une grande partie des caractères français, ISO 8859-15 corrige un peut le truc avec l'ajout de quelques caractères.
- ISO 10646 est un charset plus large permettant d'encoder presque tout les caractères du monde.
- Unicode reprend tout les caractères de ISO 10646, en les codant de manière plus puissante.
- UTF-8 est une facon de représenter Unicode.
En gros, l'ISO 8859-1 qui est très rependu chez nous, c'était bien, dans le temps ! Maintenant nos machines sont assez puissantes et ont assez de mémoire pour que l'UTF-8 ne mange rien ! De plus, on est de plus souvent amené a utiliser des caractères étrangers, comme le japonais ou certains noms propres. Unicode est donc presque indispensable pour un logiciel de ce nom !
La position d'Autoit a ce sujet
http://www.autoitscript.fr/autoit3/docs ... nicode.htm
On nous recommande chaudement UTF-8 ! Innutile donc de se poser la question de savoir si Autoit le supportera
Attardez vous quand meme sur cette page pour les cas spécifiques (windows < 2000, Send, regexp, console (quoi que, ca on véra :p))
Scite4Autoit et UTF-8
Aussi méga trop bien que semble UTF-8 apres tout ce que je viens de vous raconter, il s'avère que Scite utilise par défaut l'encodage ISO 8859-1... Au passage, d'expérience personnel, j'ai déjà eu de gros bugs dans des programmes pour avoir utilisé Scite pour des modifs rapides, a cause de l'encodage.
Pour changer l'encodage de la page courrante, vous pouvez faire "Fichier -> Encodage -> UTF8"
Pour changer l'encodage par défaut, il suffit de faire "Options > Open Global option file", de trouver la ligne qui parle d'unicode (CTRL+F) et de changer les ligne comme suit :
Code : Tout sélectionner
# Internationalisation
# Japanese input code page 932 and ShiftJIS character set 128
#code.page=932
#character.set=128
# Unicode
code.page=65001 [color=#40BF00]<--- on retire le #de cette ligne, [/color]
#code.page=0 [color=#40BF00]<--- et on en ajoute un là ![/color]
#character.set=204
Compiler en avec Unicode
C'est bien bô d'avoir un script en UTF-8, mais si on le compile sans instructions spécifique depuis Scite, il sera converti en ISO ! arf..
La solution est allors de passer le paramètre /unicode au compilateur, ce qui force la compilation en ligne de commande...
Je n'ai pas trouvé de directive pour AutoitWarper la dessus !
Sinon, sachez que le clic droit -> compiler est plus malin, et saura utiliser Unicode si il le faut !
ConsoleWrite() et Unicode
ConsoleWrite() c'est vachement sympa pour communiquer avec le programme qui appel notre scripte, mais "Characters are converted to ANSI before being written." Ha ben merci ! C'est sympa !...
En fait, la console ne supporte que l'ANSI, donc on peut comprendre la conversion. Mais dans le cadre ou l'on utilise le flux de sorti pour envoyer des infos, c'est vraiment pas cool !
Une solution, un peu bricolée mais qui marche, on converti notre chaine en binaire avec le flag 4 pour bien convertir l'UTF-8, puis on décode du binaire vers String avec le flag 1, pour dire "c'est du ANSI promis juré !"
Du coup, on se retrouve avec notre chaine parfaitement écrite, mais autoit pense qu'il s'agit d'ANSI donc il l'envoi sans chercher a convertir !
exemple
Code : Tout sélectionner
ConsoleWrite(StringToBinary(BinaryToString("Ma phrase en Japonais !! ♥", 1), 4))
Conclusion
Vu comment c'est la galère de passer en UTF-8, je vous conseil de laisser tomber si vous en avez pas besoin. Apres tout, j'ai passé 3ans avant que cela ne me bloque !
Mais si vous êtes joueurs, ou simplement curieux, ou bien obligé, alors j'espère qu'avec tout ca vous pourrez vous en sortir !