Forum Programmation.perl de ISO-8859-1 en UTF-8 en pelr

Posté par  .
Étiquettes : aucune
0
19
déc.
2005
Bonjour,
J'amerais convertir un flux ISO-8859-1 en UTF-8 en perl... sans devoir passer par de fichiers ? y a-t-il un moyen ?
Je travaille avec perl 5.8.7, je reçois un flux en ISO-8859-1 et j'aimerais le convertir en UTF-8.
Je ne trouve pas de moyens à part en écrivant des fichiers, ce que j'aimerais éviter...
Y a-t-il des posibilités ? Quelqu'un peut m'aider ? Y existe-t-il des exemples ? Comment savoir le format du flux que j'obtiens ?
merci d'avance.
A bientôt
Gorry
  • # Utf8

    Posté par  (site web personnel) . Évalué à 3.

    Tu pourras trouver tout ce qu'il faut sur CPAN : http://search.cpan.org/~nwclark/perl-5.8.7/lib/utf8.pm , notamment utf8::encode().
    • [^] # Re: Utf8

      Posté par  . Évalué à 1.

      Salut Florent,

      Merci pour ton lien c'est exatement ce que je cherchais.

      J'utilise dans mon code perl :

      use utf8;

      puis

      utf8::encode($monTxtISO);

      puis

      utf8::decode($monTxtUF8);


      Mon but de de passer mon programme de Windows sur linux,

      En entrée j'ai du ISO-8859-1ou du UTF-8, je convertis tout en UTF-8 puis à la fin je retourne le flux dans le format que j'ai reçu (ISO-8859-1ou du UTF-8).

      Poutant j'ai des caractères dans mon code perl (avec Eclipse) qui passent mal, notement celui-ci : ° (U+00B0).
      Pourtant j'ouvre le fichier sous eclipse au format UTF-8, tous mes fichier sont en utf-8. et j'indique use utf8;

      De plus lorsque je lis un fichier UTF-8 au format UTF-8 dans mon expression régulière ça me génére quelques erreur du type :

      Malformed UTF-8 character (unexpected non-continuation byte 0x00, immediately after start byte 0xc2) in pattern match (m//) at Lexical.pm line 136, line 83.

      notament pour le caractère ÿ (U+00FF)

      Pourtant il s'agir bien d'un fichier UTF-8 que j'ai converti sur Windows depuis cp1252 (Latin I) en UTF-8 par un programme en Java.


      Ce qui est curieur c'est que le caractère ° vaut bien 00B0 selon ultraEdite ou le Chractere Map de Windows.
      PAr contre avec un autre logiciel qui m'affiche sa valeure en EXA (Hackman) ce caractère ° se représente par 2 caractères : Â et ° (U+00C2 et U+00B0) .

      si je mets dansmon code perl :
      no utf8;
      ça se passe bien MAIS mes expressiosn régulières ne sont plus correctement traités...

      Je n'arrive pas à bout de ce problème. Si tu as d'autres url, je suis intéressé,

      Je pars en vacances et je ne risque pas de te répondre avant 2006 Alors Bonne année et à+
      Gorry
  • # Autre piste

    Posté par  . Évalué à 3.

    use Encode;

    while (<IN>) {
        print OUT encode('utf8', decode('latin1', $_));
    }


    Voir man Encode ou perldoc Encode pour plus de précisions.
    Encode::Guess pourrait aussi t'intéresser.
    Tout cela est distribué avec Perl en standard.

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

    • [^] # Re: Autre piste

      Posté par  . Évalué à 1.

      Merci pour l'info, je regarde ça et je te donne des nouvelles - après mes vacances bien méritées ;-)

      Meilleures voeux !

      Gorry

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.