Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Caractère Accentué sous Perl

5 réponses
Avatar
Mag
Bonjour,

J'ai un script perl qui reçoit dans une variable un
mot. Le probleme est qu'il change les caractères
accentués.

Par exemple:

l'envoi original est "jibé7r"
hors ma variable ce retrouve remplis de "jib\3517r"


il a donc remplacement du "é" par "\351"

comment je peux faire pour remettre ma variable correcte ?

Merci d'avance
Mag

5 réponses

Avatar
Paul Gaborit
À (at) Mon, 23 Feb 2009 14:38:17 +0100,
Mag écrivait (wrote):
J'ai un script perl qui reçoit dans une variable un
mot. Le probleme est qu'il change les caractères
accentués.



???

Par exemple:

l'envoi original est "jibé7r"
hors ma variable ce retrouve remplis de "jib3517r"



Comment savez-vous ce qu'il y a dans la variable ?

il a donc remplacement du "é" par "351"



Il se trouve que le caractère "é" a pour code la valeur 233 (en
décimal), 0xE3 (en hexadécimal) ou 0351 (en octal) si vous utilisez
l'encodage iso-8859-1 (iso-8859-15).

Donc tout cela me paraît que très normal (pour des chaînes en Perl).

comment je peux faire pour remettre ma variable correcte ?



La bonne question serait plutôt : comment faire pour afficher
correctement le contenu de la variable ?

Mais là, pour vous aider, il nous faudrait en savoir plus sur le moyen
utilisé et le medium visé pour cette affichage...

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
Mag
Paul Gaborit a écrit :
À (at) Mon, 23 Feb 2009 14:38:17 +0100,
Mag écrivait (wrote):
J'ai un script perl qui reçoit dans une variable un
mot. Le probleme est qu'il change les caractères
accentués.



???

Par exemple:

l'envoi original est "jibé7r"
hors ma variable ce retrouve remplis de "jib3517r"



Comment savez-vous ce qu'il y a dans la variable ?



un print ("$mavariablen"); pour la voir
mais dison que cela execute une autre appli C elle qui dans ses logs
indique "Bad Password"



il a donc remplacement du "é" par "351"



Il se trouve que le caractère "é" a pour code la valeur 233 (en
décimal), 0xE3 (en hexadécimal) ou 0351 (en octal) si vous utilisez
l'encodage iso-8859-1 (iso-8859-15).

Donc tout cela me paraît que très normal (pour des chaînes en Perl).



comment je peux faire pour remettre ma variable correcte ?



La bonne question serait plutôt : comment faire pour afficher
correctement le contenu de la variable ?

Mais là, pour vous aider, il nous faudrait en savoir plus sur le moyen
utilisé et le medium visé pour cette affichage...



disons que mon script reçoit le mot de passe (la variable est un
password). Je reçoit donc le mot de passe et je dois executer une
application sous la forme:

/sbin/monappli --user=Monlogin --password=Monpassword

hors la, il lance mon appli avec le /351 qui du coup n'est pas reconnu
comme password correct ..
Avatar
espie
In article <49a2b5eb$0$13455$,
Mag wrote:
disons que mon script reçoit le mot de passe (la variable est un
password). Je reçoit donc le mot de passe et je dois executer une
application sous la forme:

/sbin/monappli --user=Monlogin --password=Monpassword

hors la, il lance mon appli avec le /351 qui du coup n'est pas reconnu
comme password correct ..






Iick !!! passer des mots de passe sur la ligne de commande ! au fou !

Tu es au courant que ton mot de passe va se voir dans n'importe quelle
invocation de ps ?

Au mimimum, demander a l'application en question de gerer le mot de passe
sur son entree standard est un poil plus secure.
Avatar
Paul Gaborit
À (at) Mon, 23 Feb 2009 15:42:57 +0100,
Mag écrivait (wrote):
Paul Gaborit a écrit :
Comment savez-vous ce qu'il y a dans la variable ?



un print ("$mavariablen"); pour la voir



Ok pour un print... mais sur quel type de terminal ? Avec quel type
d'encodage ?

Pourriez-vous plutôt nous donner le résultat de :

use Data::Dumper;
print Dumper($mavariable);

et (en supposant que le 'é' est le troisième caractère de votre
chaîne) le résultat de :

print ord(substr($mavariable, 2,1)), "n";

mais dison que cela execute une autre appli C elle qui dans ses logs
indique "Bad Password"



Ah...

disons que mon script reçoit le mot de passe (la variable est un
password). Je reçoit donc le mot de passe et je dois executer une
application sous la forme:

/sbin/monappli --user=Monlogin --password=Monpassword

hors la, il lance mon appli avec le /351 qui du coup n'est pas reconnu
comme password correct ..



Et là (outre le fait de laisser le mot de passe apparaître en clair
lors d'un appel à 'ps'), selon la manière dont est appelée cette
application, il se peut que le problème vienne de l'encodage du shell
intermédiaire...

Quelle syntaxe utilisez-vous pour appeler votre application externe ?
Un appel à 'system' avec une seule chaîne ? Un appel à 'system' avec
plusieurs arguments ? Autre chose ?

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
Mag
Marc Espie a écrit :
In article <49a2b5eb$0$13455$,
Mag wrote:
disons que mon script reçoit le mot de passe (la variable est un
password). Je reçoit donc le mot de passe et je dois executer une
application sous la forme:

/sbin/monappli --user=Monlogin --password=Monpassword

hors la, il lance mon appli avec le /351 qui du coup n'est pas reconnu
comme password correct ..






Iick !!! passer des mots de passe sur la ligne de commande ! au fou !

Tu es au courant que ton mot de passe va se voir dans n'importe quelle
invocation de ps ?

Au mimimum, demander a l'application en question de gerer le mot de passe
sur son entree standard est un poil plus secure.




Pas d'interet, machine pas raccordé a un reseau
et je suis la seule a avoir un compte (pas de compte utilisateur etc ...)

L'utilisateur rentre son password sur une machine de decoupe industriel
raccordé en liaison Serie ...