printf et utf8

printf et utf8 - Perl - Programmation

Marsh Posté le 13-01-2012 à 10:57:55    

:hello:
 
Lorsque je fais un printf (dans un fichier), j'ai un problème d'alignement lorsque les chaînes (en UTF8) contiennent des caractères accentués... Par contre, lorsque je change l'encodage des caractères, l'alignement se fait impeccablement, mais les caractères accentués sont mal présentés (sous la forme é pour le "é" ).
 
En clair :

Code :
  1. printf(WRK "%-10s : %s\n", $label1, $label2);

me donne soit un bon alignement, mais de mauvais caractères accentués :

Nom        : Martin
Numéro    : 12
Rue        : avenue de Paris

soit de bons caractères accentués mais un mauvais alignement :

Nom        : Martin
Numéro   : 12
Rue        : avenue de Paris


J'ai l'impression que printf fait une conversion interne (en ISO ?) pour faire ses alignements, mais je n'arrive pas à m'en sortir ! (J'utilise la version 5.8.8 de Perl).
 
Merci pour votre aide ! :)

Reply

Marsh Posté le 13-01-2012 à 10:57:55   

Reply

Marsh Posté le 13-01-2012 à 11:14:34    

Suffit que je poste sur HFR pour trouver moi-même la réponse... :D

Code :
  1. printf(WRK "%-10s : %s\n", Encode::decode_utf8($label1), Encode::decode_utf8($label2));


Message édité par Titprem le 13-01-2012 à 11:14:53
Reply

Marsh Posté le 13-01-2012 à 12:36:19    

Petite précision : le fichier produit est alors codé en ISO. Pour retrouver un fichier UTF8 en sortie, il faut mettre :

Code :
  1. open(WRK, ">:utf8", $file);

Reply

Marsh Posté le 13-01-2012 à 19:07:54    

Désolé, je viens juste de passer sur le topic, sinon je t'aurais indiqué la correction plus tôt.
Le fichier de sortie est à priori codé selon le codage par défaut de l'OS, donc souvent en ISO Latin 1.
A+,
 


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

Marsh Posté le 14-01-2012 à 22:51:51    

Pas de soucis, gilou, ton aide est toujours précieuse ! :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed