Page 1 sur 1
[R] Affichage caractère dans une application mode console
Posté : mar. 27 mai 2014 01:44
par K4rl3oN
Bonsoir à tous,
J'ai un soucis lors de l'affichage de caractères arabes dans une application console, j'ai essayé les solutions mentionnées dans le tuto:
[Tuto] Autoit et UTF-8
Code : Tout sélectionner
ConsoleWrite(@CRLF&_UTF8("السلام عليكم")&@CRLF)
Func _UTF8($chaine)
Return BinaryToString(StringToBinary($chaine, 4), 1)
EndFunc
le texte s'affiche correctement sous l'editeur SciTE:

mais après compilation le texte affiché est:
Des suggestions?
Merci d'avance
Re: [..]Affichage de caractère dans une application mode con
Posté : mar. 27 mai 2014 03:49
par ZDS
Bonjour,
Je ne suis pas du tout sûr de ce que j'avance, mais le problème ne vient pas de ton script, mais de la console : cmd n'affichera sans doute jamais les caractères arabes, même si tu les tapes toi même (j'ai pourtant installé la langue d'entrée, et pourtant j'ai des "?" à l'affichage de chaque caractère). Cela peut venir de deux choses, soit la console ne les gère tout simplement pas, que cela provienne d'un script AutoIt ou non, soit c'est à cause de la police d'écriture utilisée dans la console ("Raster", équivalente à "System") qui ne contient tout simplement pas les caractères en question.
En bref, je pense que tu demandes l'impossible, mais un spécialiste de ce genre de souci pourra sans doute te répondre mieux que moi.
A bientôt !
PS : Je t'ai donné mon avis uniquement pour que tu commences à rechercher/envisager une autre solution en attendant une confirmation d'autrui.
Re: [..]Affichage de caractère dans une application mode con
Posté : mar. 27 mai 2014 04:46
par K4rl3oN
Merci ZDS, en effet je vais utiliser une GUI pour l'affichage, mais j'aimerai toujours savoir si c'est possible, si quelqu'un a une idée, je suis toujours prenant

Re: [..]Affichage de caractère dans une application mode con
Posté : mar. 27 mai 2014 11:07
par Chrnos023
La console windows ne permet pas l'affichage de caractère arabe.
Re: [..]Affichage de caractère dans une application mode con
Posté : mar. 27 mai 2014 12:03
par jchd
Bien sûr que si ! Il suffit de mettre le shell en mode Unicode :
> chcp 65001
Selon la police utilisée, la console affichera telle ou telle partie du registre Unicode (aucune police existante ne contient tous les caractères !).
Re: [..]Affichage de caractère dans une application mode con
Posté : mar. 27 mai 2014 15:35
par K4rl3oN
Merci jchd
mais comment procéder? j'ai essayé un:
Code : Tout sélectionner
RunWait("chcp 65001")
ConsoleWrite(@CRLF&_UTF8("السلام عليكم")&@CRLF)
mais ça reste toujours illisible

Re: [..]Affichage de caractère dans une application mode con
Posté : mar. 27 mai 2014 18:27
par jchd
J'ai bien précisé que peu de polices comportent un jeu de caractères très vaste. Ton bout de code ne peut fonctionner : Run crée un process séparé alors que tu écris dans la console de ton application.
Pour que tout ce petit monde fonctionne, il faut que :
o) la page de code 65001 (UTF-8) soit choisie par défaut pour la console (je ne sais plus de tête, là, comment faire ça),
EDIT: si, en fait, on créé dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor une valeur chaîne : Autorun et on y met chcp 65001
L'inconvénient est que c'est un réglage global qui peut ne pas convenir dans tous les cas. Il existe une alternative (voir ci-dessous).
o) ton application soit en mode console (CUI et non GUI),
#AutoIt3Wrapper_Change2CUI=Y ;(Y/N) Change output program to CUI in stead of GUI. Default=N
o) ton application soit compilée,
o) tu choisisses et installes une police TrueType (OpenType ne fonctionne pas avec la console) à chasse fixe et qui comporte les plages souhaitées du jeu de caractères Unicode,
o) cette police soit
enregistrée comme utilisable par la console
o) qu'elle soit sélectionnée (clic droit dans le bandeau de cmd, Propriétés > Police > ta police) et que cmd.exe accepte ce choix.
Ainsi, cmd.exe refuse d'utiliser DejaVu Sans Mono, ce qui est bien dommage. <-- C'est faux : il suffit d'insister et la sélection s'enregistre.
Après tout ça, il est concevable (mais pas certain à 100% de mon point de vue) que ça fonctionne comme tu le souhaites.
EDIT: à cette nuance près que la console créée pour le mode CUI est "brute de fonderie" et ne prend pas en compte les réglages de cmd.exe. Heureusement il est possible de contourner ce problème à l'aide d'un simple fichier batch. Avec un tel .BAT on peut soit lancer l'appli CUI seule si la page de code est UTF-8 par défaut, soit changer la page de code dans le batch avant de lancer l'appli. J'ai testé les deux et les deux fonctionnent.
Re: [..]Affichage de caractère dans une application mode con
Posté : mer. 28 mai 2014 03:07
par K4rl3oN
Encore merci jchd pour cette explication très détaillée et pour l'interet que vous portez à mon problème, si j'ai bien compris je dois installer une police TrueType qui reconnait les caractères arabes, puis ajouter une valeur au registre windows dans la clé
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
à fin d'utiliser cette police comme police d'affichage sous DOS

Re: [..]Affichage de caractère dans une application mode con
Posté : mer. 28 mai 2014 03:49
par jchd
Farpaitement ! DejaVu Sans Mono va finalement très bien.
Re: [..] Affichage caractère dans une application mode conso
Posté : dim. 01 juin 2014 06:25
par K4rl3oN
Désolé pour mon absence, et merci pour votre réponse
