Page 1 sur 1

[R] ConsoleWrite avec accents

Posté : mer. 06 juil. 2016 12:20
par jlf
Bonjour,

J'ai besoin de faire un ConsoleWrite vers une console windows (ligne de commande) dont le texte est localisé (français), donc avec accents et autres. Que le fichier du code source soit au format ANSI ou UTF8, ou que j'essaye avec la double conversion ConsoleWrite(BinaryToString(StringToBinary($sString, $in), $out)), rien n'y fait....
Voir code ci-dessous, compilé pour la ligne de commande.
Si quelqu'un a la solution, merci d'avance :D

[codeautoit]#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Version=Beta
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include-once

For $in=1 To 4
For $out=1 To 4
ConsoleWrite("$in = " & $in & ", out = " & $out & @CRLF)
_ConsoleWrite("terminé" & @CRLF,$in,$out)
Next
Next

Func _ConsoleWrite($sString,$in,$out)
Return ConsoleWrite(BinaryToString(StringToBinary($sString, $in), $out))
EndFunc[/codeautoit]
JL

Re: [..] ConsoleWrite avec accents  

Posté : mer. 06 juil. 2016 17:28
par jchd

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Version=Beta
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include-once

_ConsoleWrite("terminé : ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»ÁÂÀ©¢ãÃðÐÊËÈıÍÎÏÌÓßÔÒõÕµþÞÚÛÙýݱ‗¾¶§÷°·¹²³" & @CRLF)

Func _ConsoleWrite($sString)
	Return ConsoleWrite(__WinAPI_WideCharToMultiByte($sString, 850))
EndFunc   ;==>_ConsoleWrite

Func __WinAPI_WideCharToMultiByte($vUnicode, $iCodePage = 0, $bRetString = True)
	Local $sUnicodeType = "wstr"
	If Not IsString($vUnicode) Then $sUnicodeType = "struct*"
	Local $aResult = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $iCodePage, "dword", 0, $sUnicodeType, $vUnicode, "int", -1, _
			"ptr", 0, "int", 0, "ptr", 0, "ptr", 0)
	If @error Or Not $aResult[0] Then Return SetError(@error + 20, @extended, "")

	Local $tMultiByte = DllStructCreate("byte[" & $aResult[0] & "]")

	$aResult = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $iCodePage, "dword", 0, $sUnicodeType, $vUnicode, _
			"int", -1, "struct*", $tMultiByte, "int", $aResult[0], "ptr", 0, "ptr", 0)
	If @error Or Not $aResult[0] Then Return SetError(@error + 10, @extended, "")

	If $bRetString Then Return DllStructGetData($tMultiByte, 1)
	Return $tMultiByte
EndFunc   ;==>__WinAPI_WideCharToMultiByte

Re: [R] ConsoleWrite avec accents

Posté : mer. 06 juil. 2016 19:33
par jlf
Merci !
Je pense que j'aurai pu chercher très très longtemps....

Re: [R] ConsoleWrite avec accents

Posté : sam. 09 juil. 2016 19:41
par GMH
Moi j'obtiens ça :
termin‚ : €‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯µ¶·¸½ÆÇÐÑÒÓÔiÖרÞàáâãäåæçèéêëìíñ=óôõöøúûýü

Re: [R] ConsoleWrite avec accents

Posté : dim. 10 juil. 2016 01:25
par jchd
Une fois compilé et lancé dans une console DOS, ou simplement exécuté sans compilation depuis SciTE ?
Un programme CUI doit être compilé pour fonctionner comme prévu.

Re: [R] ConsoleWrite avec accents

Posté : dim. 10 juil. 2016 08:26
par GMH
Mon résultat est sans compilation depuis SciTE. Cela explique donc mon résultat.

Re: [R] ConsoleWrite avec accents

Posté : dim. 10 juil. 2016 11:45
par jchd
Dans cette situatiion, la sortie est convertie vers la page de code de console spécifiée dans SciTE4AutoIt3, ici UTF8.

Ceci dit, petite précision pour la code ci-dessus : j'ai mis "en dur" la page de code 850, mais d'aurais dû aller chercher cete valeur dans le registre pour faire propre et portable. Ce détail est laissé à titre d'exercice.

Re: [R] ConsoleWrite avec accents

Posté : mer. 23 nov. 2016 10:45
par jpascal
Bonjour,

Je viens de lancer le script et il m'affiche termin‚ au lieu de terminé.

Le problème vient-il du code 850 ? SI oui, dans quelle clé de registre puis-je récupérer le bon code ?

Re: [R] ConsoleWrite avec accents

Posté : mer. 23 nov. 2016 11:17
par jchd
Que renvoie chcp ?

Re: [R] ConsoleWrite avec accents

Posté : mer. 23 nov. 2016 12:08
par jpascal
Le code 850

Re: [R] ConsoleWrite avec accents

Posté : mer. 23 nov. 2016 14:57
par jchd
Alors je vois mal le problème.

Re: [R] ConsoleWrite avec accents

Posté : mer. 23 nov. 2016 15:56
par jpascal
Je commence à comprendre.

Le fichier contenant mon script est encodé en ANSI.

Si je créé un fichier encodé en UTF8, cette fois-ci j'obtiens :
Image

Re: [R] ConsoleWrite avec accents

Posté : mer. 23 nov. 2016 19:17
par jpascal
Au temps pour moi. J'ai zappé ton information concernant la compilation du script.