/* Test.prg. Essai de convertir une chaîne Ansi en chaîne Unicode. J'ai le même résultat que win_AnsiToWide. This code is a basic sample. https://docs.microsoft.com/fr-fr/windows/win32/api/stringapiset/nf-stringapiset-multibytetowidechar?redirectedfrom=MSDN https://docs.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-widechartomultibyte https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getacp */ #define CP_ACP 0 #define CP_THREAD_ACP 3 #define MB_COMPOSITE 2 // Enlève les accents. #define MB_PRECOMPOSED 1 #define WC_COMPOSITECHECK 512 local i // Numérique de comptage. local c // Caractère à traiter. local cw // Caractère unicode de retour MultiByteToWideChar(). local cCodePage // Code page du système. local nChars // Nombre de caractères de la chaîne de retour MultiByteToWideChar(). local cAnsi // chaîne Ansi à transformer. local cWide // Chaîne unicode de retour. local cTest // Chaîne Ansi de test. if not type( "MultiByteToWideChar" ) == "FP" extern CINT MultiByteToWideChar( CUINT, CULONG, CSTRING, CINT, CSTRING, CINT ) Kernel32.dll endif if not type( "WideCharToMultiByte" ) == "FP" extern CINT WideCharToMultiByte( CUINT, CULONG, CSTRING, CINT, CSTRING, CINT, CSTRING, CLOGICAL ) Kernel32.dll endif if not type( "GetACP" ) == "FP" extern CINT GetACP( CVOID ) Kernel32.dll endif if new file().exists( "_Result.txt" ) new file().delete( "_Result.txt" ) endif set alte to _Result.txt set alte on ? "Test programme Ansi to Wide." ? cCodePage = GetACP() ? "Code page :", cCodePage cAnsi = "l'été à Plan d'Aups, c'est même très bien." cWide = "" cTest = "" ? "Len( cAnsi ) :", Len( cAnsi ) ? ? cAnsi ? for i = 1 to len( cAnsi ) c = subs( cAnsi, i, 1 ) cw = space( 2 ) nChars = MultiByteToWideChar( cCodePage, MB_PRECOMPOSED, c, len( c ) ; , cw, len( cw ) ) cWide += cw c = space( 1 ) nChars = WideCharToMultiByte( cCodePage, WC_COMPOSITECHECK, cw, len( cw ) ; , c, len( c ), null, null ) cTest += c endfor ? cWide ? ? cTest ? ? set alte off set alte to if not type( "ShellExecute" ) == "FP" extern CHANDLE ShellExecute( CHANDLE, CSTRING, CSTRING, CSTRING, CSTRING, CINT ) ; Shell32.dll from "ShellExecuteA" endif ShellExecute( 0, "open", set( "directory" ) + "\_Result.txt", null, null, 1 ) return