19Fermer21
ZerosquareLe 26/01/2010 à 14:46
OK.

Bon pour résumer (si j'ai bien compris), Zephyr cherche grosso modo à copier un tableau d'octets dans le buffer interne d'une zone de texte, pour qu'à la lecture de cette dernière le programme se récupère le tableau tel quel. Ici c'est pour forcer un programme qui envoie en UTF-8 à transmettre une chaîne en ISO-8859-1, mais à la limite c'est pas la question.

Alors comme je le disais hier (et confirmé par d'autres personnes plus haut) :

- en interne, Windows fonctionne soit en ANSI (Windows-1252), soit en UTF16. Les fonctions de l'API qui gèrent des chaînes sont suffixés par A et W, respectivement.

- on peut lire le contenu en UTF16 d'une zone de texte avec GetWindowTextW() et le définir avec SetWindowTextW(), mais je ne suis pas sûr du tout qu'il n'y ait pas de conversion/vérification effectuée pour voir si la chaîne passée est de l'UTF16 valide. En d'autres termes c'est pas sûr que ça corresponde directement à l'état du buffer interne de la zone de texte.

- comme les zones de texte ne gèrent pas directement l'UTF8, il y a forcément une conversion UTF16->UTF8 avant que le soft envoie le buffer. Donc définir le buffer avec les octets bruts qu'on veut envoyer ne marchera pas, il faut tenir compte de cette conversion (là aussi, possibilité que ça coince si il y a vérification de la validité de la chaîne).