Page 1 sur 1

[..] Detection Ansi ou Unicode

Posté : sam. 06 sept. 2014 11:02
par ani
Bijour,
je recherche un moyen simple pour vérifier une stucture de type ansi ou unicode
je crée quelque structure de type ANSI et en faisant appel au fonction (non modifié) d'autoit qui sont la plupart en UNICODE çà bug (normal).
Au debut j'utilisait la macro unicode, dans les fonctions mais çà va pas non plus.

Y a une soluce ?

Re: [..] Detection Ansi ou Unicode

Posté : sam. 06 sept. 2014 11:26
par jchd
Qu'appelles-tu "structure" ? Peux-tu poster un exemple concret ?

S'il s'agit de déterminer si une chaîne ou un fichier texte est en ANSI ou en Unicode (UTF8) il n'y a pas de solution en général, car tout fichier ou chaîne UTF8 est une chaîne ANSI valide (l'inverse n'est pas vrai) indépendemment de la page de code (codepage) en vigueur.

Si tu imposes des conditions particulières sur le contenu, il y a peut-être une possibilité.

Re: [..] Detection Ansi ou Unicode

Posté : sam. 06 sept. 2014 14:25
par ani
Un exemple

Code : Tout sélectionner

$iMsg = "Bijour Ani"
$Len = StringLen($iMsg) + 1
$tA = DllStructCreate("char msg[" & $Len & "]")
DllStructSetData($tA,"msg",$iMsg)
$pA = DllStructGetPtr($tA)
consolewrite($pA)
$tA = 0
comment puis-je savoir si la structure est de type ANSI ou UNICODE.
Sachant qu'ici c'est de l'ANSI

et aussi pourquoi le ptr de la structure n'est pas static sous seven ? y a t'il une autre methode ?

merci

Re: [..] Detection Ansi ou Unicode

Posté : sam. 06 sept. 2014 16:06
par jchd
Tu peux t'inspirer de ce que j'utilise pour faire un dump d'une variable :

Code : Tout sélectionner

#include "..\include\dump.au3"
#include <string.au3>

Local $t = DllStructCreate("char[15];wchar[15]")
DllStructSetData($t, 1, "Chaîne ANSI")
DllStructSetData($t, 2, "Chaîne UCS2")
ConsoleWrite(_VarDump($t) & @LF)
avec l'include :
► Afficher le texte
L'idée est de sauvegarder le premier caractère de l'élément considéré, d'y écrire un caractère qui ne figure dans aucun jeu ANSI et voir si on relit le caractère Unicode écrit (dans ce cas c'est du wchar[xxx]) ou si on relit ? ce qui veut dire qu'on a affaire à du char[xxx].

Je fais de même pour différencier les champs byte, short, ushort, int, uint, int64.

Mais je ne comprends pas la partie "pointeur statique". L'adresse (figée) de la structure est affichée par mon dump et elle ne change pas spontanément (encore heureux !).

Re: [..] Detection Ansi ou Unicode

Posté : sam. 06 sept. 2014 18:36
par ani
Pour la partie static, sous xp avec le code du dessus il me renvoie un pointeur (ex:0x01C41590 ~ 9015C401), que je peut inserer directement elle ne change pas, mais sous Seven elle deviend dynamique et là je comprend pas (3.3.6.x)

Re: [..] Detection Ansi ou Unicode

Posté : sam. 06 sept. 2014 21:57
par jchd
Tu veux dire que l'adresse change à chaque lancement ? Bah, c'est normal et inévitable.