Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1498 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Ouvrir une commande en UTF-8 [RÉSOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ouvrir une commande en UTF-8 [RÉSOLU]

n°1775607
Predicator
Posté le 21-08-2008 à 17:43:11  profilanswer
 

Bonjour,
 
J'essaye de lancer une commande, tout en récupérant le résultat pour une exploitation ultérieure...
 
Voici ce que ça donne en très simple :
 

Code :
  1. my $com = $_[0];
  2. open COM, "$com|";
  3. my @lines = <COM>;
  4. close COM;


 
Le problème est que le résultat de la commande contient des caractères unicode... Je voudrais donc récupérer le contenu au bon format...
 
Pour lire un fichier, il suffit de faire :
 

Code :
  1. my $file = $_[0];
  2. open IN, "<:utf8", "$file";
  3. my @lines = <IN>;
  4. close IN;


 
Mais on ne peut pas le faire pour une commande, j'ai essayé ces deux variantes :
 

Code :
  1. open COM, ":utf8", "$com|";
  2. open COM, "<:utf8", "$com|";


 
mais sans succès...
 
Quelqu'un sait comment résoudre mon problème ?
 
Merci d'avance... :hello:

Message cité 1 fois
Message édité par Predicator le 22-08-2008 à 13:41:42
mood
Publicité
Posté le 21-08-2008 à 17:43:11  profilanswer
 

n°1775844
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-08-2008 à 10:08:36  profilanswer
 

use encoding et regarde aussi du coté de l'option -C de perlrun.


Message édité par anapajari le 22-08-2008 à 10:08:44

---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1775958
Predicator
Posté le 22-08-2008 à 13:39:14  profilanswer
 

Le use encoding n'a eu aucun effet, et d'après ce que j'ai lu, ça joue sur l'encodage du script,et non l'encodage du retour de la commande.
 
Cependant, j'ai réussi à avoir un résultat à peu près potable, mais avec un point que je ne comprends pas.
 
Primo, j'ai mis mon script en UTF-8 (il était en LATIN1).
Secundo, j'ai mis le binmode de la commande en utf8 :
 

Code :
  1. my $com = "df -h";
  2. open COM, "$com|";
  3. binmode COM, ":utf8" or print "Erreur : $!";
  4. my @lines = <COM>;
  5. close COM;


 
Enfin, je joue sur la sortie CGI pour avoir le bon encoding dans le fichier HTML :
 

Code :
  1. my $cgi = new CGI;
  2. print $cgi->header('Content-type: text/html; charset=utf-8');
  3. print "<html>";
  4. print "<head>";
  5. print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
  6. print "</head>";
  7. print "<body>";
  8. ...


 
Alors les 2 lignes indiquant le charset sont obligatoires. Avec une seule ça ne marche pas.
J'ai beau avoir des notions de Perl, je ne connais pas du tout l'utilisation de perl en CGI, donc je n'ai pas d'explication à donner. Je suis preneur de toute explication, histoire de me coucher moins con...
 
Merci pour ta réponse en tout cas :)

Message cité 1 fois
Message édité par Predicator le 22-08-2008 à 13:41:28
n°1775968
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-08-2008 à 14:05:10  profilanswer
 

Predicator a écrit :

Le use encoding n'a eu aucun effet, et d'après ce que j'ai lu, ça joue sur l'encodage du script,et non l'encodage du retour de la commande.


Tout à fait, mais j'avais pas super bien compris le contexte. Tu noteras d'ailleurs que je te parlais de perlrun avec -C (qui lui règle STDIN/OUT) alors que tu te sers de perl en cgi.

Predicator a écrit :

Alors les 2 lignes indiquant le charset sont obligatoires. Avec une seule ça ne marche pas. J'ai beau avoir des notions de Perl, je ne connais pas du tout l'utilisation de perl en CGI, donc je n'ai pas d'explication à donner. Je suis preneur de toute explication


Ton pb ne venait pas du perl mais de l'affichage dans le navigateur.  
Par défault ( il me semble que) cgi/perl encode en latin1, et afficher de l'utf8 en latin donne un résultat... pas terrible.
Quoi qu'il en soit tout mettre dans le même encoding est une très bonne solution,  une autre étant de se servir de Encode par exemple.
 


---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1775987
Predicator
Posté le 22-08-2008 à 14:21:36  profilanswer
 

Le manque d'explication que j'ai, c'est sur pourquoi les deux lignes sont obligatoires, alors qu'elles font à priori la même chose...
 
D'ailleurs, j'ai eu un effet de bord assez marrant. En écrivant n'importe quel texte avant le code HTML dans la sortie, l'affichage était correct, même sans les deux lignes...
 
Y'a des choses masquées quand même :)

n°1776230
gilou
Modérateur
Modzilla
Posté le 22-08-2008 à 19:50:59  profilanswer
 

Predicator a écrit :

Bonjour,
 
J'essaye de lancer une commande, tout en récupérant le résultat pour une exploitation ultérieure...
 
Voici ce que ça donne en très simple :
 

Code :
  1. my $com = $_[0];
  2. open COM, "$com|";
  3. my @lines = <COM>;
  4. close COM;


 
Le problème est que le résultat de la commande contient des caractères unicode... Je voudrais donc récupérer le contenu au bon format...

Il me semble qu'il faut faire ce genre de chose:

Code :
  1. my $com = $_[0];
  2. use open ':utf8'; # ou bien  use open IN => ':utf8';
  3. open COM, "$com|";
  4. my @lines = <COM>;
  5. close COM;
  6. #et la tu peux remettre open a la precedente valeur d'encodage si tu le veux.


 
A+,


Message édité par gilou le 22-08-2008 à 20:41:25

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Ouvrir une commande en UTF-8 [RÉSOLU]

 

Sujets relatifs
[Résolu] Problème d'upload de fichier[Resolu] Export ACCESS vers txt
[RESOLU] [VBA excel] copier un fichier d'un repertoire a un autre[Résolu]Modifier Menu contextuel clic droit javascript/html
[résolu]Appel de fonctionTracer des graphiques à la chaînes avec Excel/VBA [Résolu]
[RESOLU]SOAP & WSDL (java6)[RESOLU] [EXCEL] rechercher un caractere dans un texte
[résolu] visual c++ 2008 équivalent de l'app.path [résolu][résolu] pb fonctions javascript
Plus de sujets relatifs à : Ouvrir une commande en UTF-8 [RÉSOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR