IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Passer de ascii vers unicode


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Par défaut Passer de ascii vers unicode
    Bonjour,

    J'ai un fichier texte avec du texte en ASCII dont certains bout de chaine correspondent au codage unicode.
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le couch\u00e9 du soleil est \u00e0 10h.
    Je n'arrive pas à le passer dans un format du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le couché du soleil est à 10h.
    J'ai essayé avec le module encode 'encode_utf8'
    J'ai aussi essayé de faire une substitution de '\u00' par '\x'

    rien ne marche...
    auriez vous une idée de comment régler le problème ?
    merci d'avance

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Ton message n'est pas très clair...
    Le texte d'origine contient-il litéralement des "\u..." ou contient-il les caractères Unicode encodé en utf-8 ? Selon ta réponse la solution sera bien différente.
    Par ailleurs soit bien conscient que de toute façon l'encodage latin-9 est bien trop limité pour traduire tous les caractères Unicode dedans, donc tu risques d'avoir des textes non-réencodable, que veux-tu faire dans ce cas ?

    (Par ailleurs "ASCII" est incorrect : ce terme désigne les caractères encodable sur 7bits et ils sont encodés de la même façon en utf-8 ou en latin-9 ou autre encodage sur 8bits.)

    --
    Jedaï

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Par défaut
    Merci pour votre réponse rapide
    excusez moi je ne suis pas très callé dans les encodages de caractères.

    Il y a bien littérallement les \u... dans ce fichier texte.
    J'aimerais en effet convertir ses caractères en latin.
    Et si le caractère n'existe pas en latin-9, le mieux c'est d'ignorer ce caractère, ce n'est pas très important (sois le laisser en \u... soit avoir un caractère spécial qui n'est pas interpreté correctement !)


    Si vous avez la solution je suis preneur !
    J'espère que j'ai répondu à vos questions
    Merci d'avance

  4. #4
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Par défaut
    J'ai essayé beaucoup de chose, mais rien qui marche ce que je ne comprends pas c'est que lorsque j'ai une chaine de caractères du genre "\xe9" elle est bien interprété, mais lorsque j'ai un chaine du genre "\u00e9" puis que je remplace "\u00" par "\x" alors là ce n'est plus interprété....
    En voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $a="Le couch\xe9 du soleil est \u00e9 10h.";
    $a =~ s/\u00/\x/g;
    print $a;
     
    ---output---
    Le couch� du soleil est e9 10h.
    Quelqu'un peu expliquer pourquoi ? ou a une solution au post ?
    Merci d'avance

  5. #5
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Inutile d'utiliser une substitution, Il existe certainement des modules faisant cela du genre de :
    http://search.cpan.org/~dankogai/Enc...26/encoding.pm
    http://search.cpan.org/~jv/PostScrip...in9Encoding.pm

    Recherche le module approprié sur le CPAN
    http://search.cpan.org/search?query=encoding+&mode=all

  6. #6
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Par défaut
    Salut, merci mais je ne pense pas qu'un module existant pourra régler mon problème

    Le problème n'est pas l'existence de module pour encoder, car je pense que ces modules servent à passer d'un encodage à un autre....

    Or mon fichier contient des données en ASCII (plain text) mais certains bouts de chaînes correspondent à de l'Unicode.

    Mon fichier n'est donc pas de l'unicode à passer en latin, mais de l'ascii ou certaines chaînes sont à interpréter en unicode...

  7. #7
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Citation Envoyé par rastakouair Voir le message
    J'ai essayé beaucoup de chose, mais rien qui marche ce que je ne comprends pas c'est que lorsque j'ai une chaine de caractères du genre "\xe9" elle est bien interprété, mais lorsque j'ai un chaine du genre "\u00e9" puis que je remplace "\u00" par "\x" alors là ce n'est plus interprété....
    En voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $a="Le couch\xe9 du soleil est \u00e9 10h.";
    $a =~ s/\u00/\x/g;
    print $a;
     
    ---output---
    Le couch� du soleil est e9 10h.
    Quelqu'un peu expliquer pourquoi ? ou a une solution au post ?
    Merci d'avance

    L'utilisation des doubles quotes fait que ce qui est contenu à l'intérieur est interprété.

    Si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $a= "Le couch\xe9 du soleil est \u00e9 10h.";
    print $a;
    # Cela écrit Le couché du soleil est 00e9 10h
    Tandis que les simple quotes n'interprètent rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $a= 'Le couch\xe9 du soleil est \u00e9 10h.';
    print $a;
    # Le couch\xe9 du soleil est \u00e9 10h.

    Pour ce qui est de la substitution, pour indiquer le backslash tu dois le faire précéder d'un autre backslash.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/local/bin/perl
     
    use strict;
    use warnings;
     
    my $a= 'Le couch\xe9 du soleil est \u00e9 10h.';
    $a =~ s{\\u00}{\\x}g;  # équivalent de $a =~ s/\\u00/\\x/g;
    print $a;
     
    # output : Le couch\xe9 du soleil est \xe9 10h.
    Ceci est juste l'explication à ta question mais je pense que ce n'est pas la manière correcte de résoudre ton problème. Attends Jedaï, il va certainement te dire quelle meilleure voie suivre.

  8. #8
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Par défaut
    Merci,
    mais il y a toujours un problème...
    A la fin de ton exemple je n'ais toujours pas les caractères d'interprété....
    Comment faire pour ne pas avoir \xe9 mais bien le caractère interprété ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 16/09/2014, 12h59
  2. Conversion de ASCII vers Unicode
    Par Arnaud F. dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/10/2008, 15h48
  3. Convertion ASCII vers UNICODE
    Par blackstrobe dans le forum Langage
    Réponses: 4
    Dernier message: 27/07/2007, 20h48
  4. Conversion texte Ascii vers Image ou Pdf
    Par davydreyAXESS dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2006, 15h45
  5. conversion ASCII vers EBCEDIC
    Par Mü dans le forum C++Builder
    Réponses: 1
    Dernier message: 04/12/2005, 19h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo