Le passage d'un projet existant en UNICODE pour son exécution a été abordé dans un précédent billet, pour le cas des échanges entre différentes plate-formes :
Mais indépendamment des échanges de données entre, par exemple, un webservice et une application sous Android ou iOS, des cas similaires peuvent se produire tout en restant sur une plate-forme unique. Voici un exemple abordé ce jour dans une demande reçue par notre support :
- une application WINDEV exécutée sous Windows avait initialement ses chaînes en exécution en ANSI.
-
cette application avait des données cryptées mémorisées sur disque dans des fichiers. Exemple :
sDonnées est une chaîne = "contenu crypté"
sPasse est une chaîne = "motpasse"
Cryptage est un Buffer
Cryptage = Crypte(sDonnées, sPasse,crypteSécurisé,encodeAucun)
fSauveBuffer("c:\démo.txt",Cryptage)
- pour son internationalisation cette application a été recompilée en UNICODE
- le traitement initial de décryptage des données reste parfaitement opérationnel :
sPasse est une chaîne = "motpasse" Cryptage est un Buffer Cryptage = fChargeBuffer("c:\démo.txt") Info(Décrypte(Cryptage, sPasse,crypteSécurisé,encodeAucun))
- cependant l'affichage des données ne donne plus le résultat attendu, puisque l'application est configurée pour afficher de l'UNICODE.
- la solution consiste donc pour retrouver l'information initiale à "forcer" l'application à utiliser l'ANSI pour montrer les données. Par exemple :
Info(AnsiVersUnicode(Décrypte(Cryptage, sPasse,crypteSécurisé,encodeAucun),alphabetAnsi))
ou :
sDonnées est une chaîne ANSI = Décrypte(Cryptage, sPasse,crypteSécurisé,encodeAucun) Info(sDonnées)
|