PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [WD24] ConsoleEcrit et encodage des caractères.
[WD24] ConsoleEcrit et encodage des caractères.
Débuté par Dergen, 10 déc. 2018 10:34 - 9 réponses
Membre enregistré
329 messages
Popularité : +28 (32 votes)
Posté le 10 décembre 2018 - 10:34
Bonjour, petite question sur l'encodage des caractères en mode console, si j'exécute ceci:
ConsoleEcrit("Pas d'affichage demandés.")


J'ai comme affichage dans mon CMD.exe sous windows 10:
Pas d'affichage demandÚs.


D'ou ma question, quel encodage le fonction ConsoleEcrit, utilises-t-elle ?

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Membre enregistré
329 messages
Popularité : +28 (32 votes)
Posté le 10 décembre 2018 - 21:22
Personne n’a eu ce souci ?

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 10 décembre 2018 - 23:48
hello,
cela ressemble fort à un problème de conversion OEM - ANSI
essaie avec :
ConsoleEcrit(AnsiVersOem("Pas d'affichage demandés."))

ou
ConsoleEcrit(OemVersAnsi("Pas d'affichage demandés."))


--
Ami calmant, J.P
Membre enregistré
28 messages
Popularité : +1 (1 vote)
Posté le 11 décembre 2018 - 08:29
Bonjour Dergen,

Dans beaucoup de forum, autre que le WLangage, il parle d'UTF-8. Par contre, ça n'a pas l'air de fonctionner partout et sur tous les OS windows. La console windows est capricieuse sur les accents, par défaut elle ne prends aucun accent, obligé de passer par le bon encodage. En C, pendant un temps, il fallait faire une correspondance des lettres à accent en héxadécimale pour qu'elles soient prisent en compte.

--
(\ _ /)
(='.'=)
(")-(")
Membre enregistré
329 messages
Popularité : +28 (32 votes)
Posté le 11 décembre 2018 - 21:34
J’avais testé l’UTF8 et l’Unicode mais j’ai pas pensé à l’OEM :merci:

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Membre enregistré
329 messages
Popularité : +28 (32 votes)
Posté le 17 décembre 2018 - 13:45
J'ai testé la solution proposé : 'AnsiToOem' et même punition j'ai un '?' a la place d'un 'é'..

Une idée ?

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Membre enregistré
28 messages
Popularité : +1 (1 vote)
Posté le 17 décembre 2018 - 14:03
As tu essayer la commande suivant dans la console. Donc à exécuter au tout début de ton code :
c:\> chcp 1252


C'est pour modifier l'encodage de la console. https://ss64.com/nt/chcp.html pour supporter l'unicode. Le 1252 est pour West European Latin

--
(\ _ /)
(='.'=)
(")-(")
Membre enregistré
329 messages
Popularité : +28 (32 votes)
Posté le 17 décembre 2018 - 19:10
Non, pas essayé mais je vais le faire.

Il serait plus simple si PCSOFT nous donnais le format de sortie de sa console.

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 18 décembre 2018 - 00:26
hello,
comme je n'ai que la version 16 de windev je ne peux pas faire d'essai avec consoleécrit mais avec ce code qui ouvre une fenêtre console :
// un exemple d'application Console avec Windev
FOREGROUND_BLUE est un entier long = 0x1
FOREGROUND_GREEN est un entier long = 0x2
FOREGROUND_RED est un entier long = 0x4
BACKGROUND_BLUE est un entier long = 0x10
BACKGROUND_GREEN est un entier long = 0x20
BACKGROUND_RED est un entier long = 0x40
BACKGROUND_INTENSITY est un entier long = 0x80
BACKGROUND_SEARCH est un entier long = 0x20
FOREGROUND_INTENSITY est un entier long = 0x8
FOREGROUND_SEARCH est un entier long = 0x10
STD_OUTPUT_HANDLE est un entier long = -11
STD_INPUT_HANDLE est un entier long = -10
STD_ERROR_HANDLE est un entier long = -12
INVALID_HANDLE_VALUE est un entier long = -1

hWnd est un entier
hcOut est un entier long
hcIn est un entier long
hcErr est un entier long
lpBuffer, lpTitle sont des chaînes ASCIIZ sur 255

// Obtenir mon handle
hWnd = Handle()

// Crée la console
SI AppelDLL32("kernel32","AllocConsole") ALORS

hcOut = AppelDLL32("kernel32","GetStdHandle", STD_OUTPUT_HANDLE)
SI hcOut = INVALID_HANDLE_VALUE ALORS Erreur("Impossible d'obtenir le STDOUT")
hcIn = AppelDLL32("kernel32","GetStdHandle", STD_INPUT_HANDLE)
SI hcOut = INVALID_HANDLE_VALUE ALORS Erreur("Impossible d'obtenir le STDIN")
SINON
Erreur("Impossible d'allouer une console")
FIN
// Mettre un titre pour la fenêtre console
AppelDLL32("kernel32","SetConsoleTitleA", "Console Windev")

// Mettre une couleur de fond et de texte dans la console en
// texte jaune brillant sur fond bleu
AppelDLL32("kernel32","SetConsoleTextAttribute", hcOut, ...
FOREGROUND_RED + FOREGROUND_GREEN + ...
FOREGROUND_INTENSITY + BACKGROUND_BLUE)
// Ecrire quelque chose dans la console
texteConsole est une chaîne = "Pas d'affichage demandés." + RC
AppelDLL32("kernel32","WriteConsoleA", ...
hcOut, texteConsole, Taille(texteConsole), &hcErr, Null)
texteConsole = AnsiVersOem("Pas d'affichage demandés." + RC)

AppelDLL32("kernel32","WriteConsoleA", ...
hcOut, texteConsole, Taille(texteConsole), &hcErr, Null)

// Enfin détruire la console
// AppelDLL32("kernel32","CloseHandle", hcOut)
// AppelDLL32("kernel32","CloseHandle", hcIn)
// AppelDLL32("kernel32","FreeConsole")


j'obtiens ceci :





on constate que le AnsiVersOem "rétablit" l'accentuation.

--
Ami calmant, J.P
Membre enregistré
352 messages
Popularité : +12 (18 votes)
Posté le 18 décembre 2018 - 09:10
Bonjour,
Je n'ai pas la version 24 de Windev, mais ce que je constate, c'est que dans la doc de ConsoleEcrit, ils entrent cet exemple de code
ConsoleEcrit("Opération réussie")


Pour moi, si l'affichage n'est pas correct, c'est simplement dans l'attente d'un patch correctif