[R] Affichage caractère dans une application mode console

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
K4rl3oN
Niveau 2
Niveau 2
Messages : 16
Enregistré le : mer. 20 avr. 2011 15:42
Status : Hors ligne

[R] Affichage caractère dans une application mode console

#1

Message 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:
Image
mais après compilation le texte affiché est:
Image

Des suggestions? :roll:
Merci d'avance
Modifié en dernier par K4rl3oN le dim. 01 juin 2014 06:26, modifié 1 fois.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..]Affichage de caractère dans une application mode con

#2

Message 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.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
K4rl3oN
Niveau 2
Niveau 2
Messages : 16
Enregistré le : mer. 20 avr. 2011 15:42
Status : Hors ligne

Re: [..]Affichage de caractère dans une application mode con

#3

Message 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 :)
Avatar du membre
Chrnos023
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 07 mai 2014 10:47
Status : Hors ligne

Re: [..]Affichage de caractère dans une application mode con

#4

Message par Chrnos023 »

La console windows ne permet pas l'affichage de caractère arabe.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..]Affichage de caractère dans une application mode con

#5

Message 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 !).
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
K4rl3oN
Niveau 2
Niveau 2
Messages : 16
Enregistré le : mer. 20 avr. 2011 15:42
Status : Hors ligne

Re: [..]Affichage de caractère dans une application mode con

#6

Message par K4rl3oN »

Merci jchd :D
mais comment procéder? j'ai essayé un:

Code : Tout sélectionner

RunWait("chcp 65001")
ConsoleWrite(@CRLF&_UTF8("السلام عليكم")&@CRLF)
 
mais ça reste toujours illisible :roll:
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..]Affichage de caractère dans une application mode con

#7

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
K4rl3oN
Niveau 2
Niveau 2
Messages : 16
Enregistré le : mer. 20 avr. 2011 15:42
Status : Hors ligne

Re: [..]Affichage de caractère dans une application mode con

#8

Message 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 :?:
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..]Affichage de caractère dans une application mode con

#9

Message par jchd »

Farpaitement ! DejaVu Sans Mono va finalement très bien.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
K4rl3oN
Niveau 2
Niveau 2
Messages : 16
Enregistré le : mer. 20 avr. 2011 15:42
Status : Hors ligne

Re: [..] Affichage caractère dans une application mode conso

#10

Message par K4rl3oN »

Désolé pour mon absence, et merci pour votre réponse :D
Répondre