PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → [WD24] ConsoleEcrit et encodage des caractères.
[WD24] ConsoleEcrit et encodage des caractères.
Iniciado por Der§en, 10,dic. 2018 10:34 - 9 respuestas
Miembro registrado
334 mensajes
Publicado el 10,diciembre 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 -
Miembro registrado
334 mensajes
Publicado el 10,diciembre 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 -
Miembro registrado
962 mensajes
Publicado el 10,diciembre 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
Miembro registrado
28 mensajes
Publicado el 11,diciembre 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.

--
(\ _ /)
(='.'=)
(")-(")
Miembro registrado
334 mensajes
Publicado el 11,diciembre 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 -
Miembro registrado
334 mensajes
Publicado el 17,diciembre 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 -
Miembro registrado
28 mensajes
Publicado el 17,diciembre 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

--
(\ _ /)
(='.'=)
(")-(")
Miembro registrado
334 mensajes
Publicado el 17,diciembre 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 -
Miembro registrado
962 mensajes
Publicado el 18,diciembre 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
Miembro registrado
352 mensajes
Publicado el 18,diciembre 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