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

Shell et commandes GNU Discussion :

awk et recode : UTF8 -> ISO8859-1 possible ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 165
    Par défaut awk et recode : UTF8 -> ISO8859-1 possible ?
    Salut,

    au sein d'un script shell, il y a une partie awk qui traite toutes les lignes d'un fichier texte ISO8859-1: il les mémorise et les reporte à un endroit précis d'un autre fichier texte qui contient déjà des caractères spéciaux (notament le à)

    le pb qui se pose est le suivant : si ces lignes contiennent des caractères spéciaux (é, è, ñ, etc), elles ne sont pas mémorisées, et donc ignorées par awk.
    En creusant un peu j'ai découvert la commande recode avec laquelle je fais passer juyste avant le fichier qui sera traité par awk en UTF8, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1.recode ISO8859-1..UTF8 préawk.txt
    2.traitement par awk du fichier préawk.txt vers le fichier postawk.txt
    Naturellement j'aimerais beaucoup ajouter une étape 3 dont il n'est pas utile d'en dire plus que ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    3.recode UTF8..ISO8859-1 postawk.txt
    Malheureusement ça ne marche pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    recode UTF-8..ISO8859-1 postawk.txt
    recode: postawk.txt failed: Entrée invalide in step `UTF-8..ISO-8859-1'
    Ca m'arrangerait vachement de trouver une astuce qui permette de repasser le fichier en iso8859 (encodage par défaut de mon éditeur de txt), existe-t-elle selon vous ? ou alors quelque chose d'autre peut être...

    Merci

  2. #2
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Salut,

    pour l'encodage des fichiers, il existe la commande iconv, elle permet de passer facilement un fichier d'un encodage à un autre, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iconv -f UTF-8 -t ISO8859-1 tonFichier.txt
    -f pour from (de) et -t pour to (à).

    Pour avoir la liste des encodages disponible, iconv -l mais le mieux restant bien évidemment de consulter la page du manuel correspondant

    En espérant avoir répondu à ta question,
    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 165
    Par défaut
    Salut et merci pour cette réponse,

    j'ai essayé diverses combinaisons et même en mêlant iconv et recode mais ça ne fonctionne pas comme attendu. Soit la variable n'est pas retenue, soit elle est reportée avec les caractères spéciaux déformés. On dirait que c'est surtout le codage UTF8 -> ISO8859-1 qui pose pb, et de fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    iconv -f UTF-8 -t ISO8859-1 postawk.txt
    iconv: Séquence d'échappement illégale à la position 55
    avec recode c'est pareil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    recode UTF8..ISO8859-1 postawk.txt
    recode: fichier.txt failed: Entrée invalide in step `UTF-8..ISO-8859-1'
    Pour être un peu plus précis, le fichier pré-awk.txt, en ISO-8859-1, contient des centaines de lignes de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if exist "%AppData%\addon.dat" (
    if exist "%ProgramFiles%\El niño\El niño.exe" (
    juste avant le script awk, j'encode le fichier en UTF-8, soit avec recode, soit avec iconv... Le role du script awk (qui m'a été donné ici d'ailleurs), est pour chaque ligne du fichier préawk.txt, de mémoriser l'expression entre "" (càd le chemin d'un fichier/dossier), et de la reporter juste en dessous de cette ligne pour au final donner le fichier final postawk.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if exist "%AppData%\coucou.dat" (
    echo procedure:le %date% a %time% "%AppData%\coucou.dat" >> "%Chemin.txt%"
    if exist "%ProgramFiles%\El niño\El niño.exe" (
    echo procedure:le %date% a %time% "" >> "%Chemin.txt%"
    comme vous le voyez dans la dernière ligne "%ProgramFiles%\El niño\El niño.exe" n'a pas été reporté. Ca c'était avec iconv. Avec recode ça donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if exist "%ProgramFiles%\El niiño\El niño.exe" (
    echoprocedure:le %date% a %time% "%ProgramFiles%\El niño\El niño.exe" >> "%Chemint.txt%"
    Est-ce que vous connaissez d'autres astuces ?

  4. #4
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Une petite pincée de Perl ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    perl -MEncode -lne 'print encode("utf8", decode("ISO-8859-1", $_))' pre.txt > post.txt
    # process post.txt
    perl -MEncode -lne 'print encode("ISO-8859-1", decode("utf8", $_))' post.txt

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 165
    Par défaut
    Merci iblis pour cette réponse, mais ça n'a pas l'air de marcher, la variable contenant des caractères spéciaux n'est pas transmise


  6. #6
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Quelle variable, je n'ai pas compris, tu n'avais pas parlé d'un fichier ?

Discussions similaires

  1. Conversion ISO8859-15 en UTF8
    Par edwin301 dans le forum Format d'échange (XML, JSON...)
    Réponses: 21
    Dernier message: 03/04/2012, 15h56
  2. Migration ISO8859 UTF8 dev->prod
    Par deromemont dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 16/01/2008, 20h44
  3. awk : plusieurs choix possibles à l'affichage
    Par rico3434 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 26/09/2007, 11h55
  4. [i18n][utf8] Outils pour convertir iso8859-1 en unicode/utf8
    Par co2 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 07/11/2005, 09h56
  5. directx et java?? possible??
    Par jiraiya dans le forum DirectX
    Réponses: 3
    Dernier message: 09/07/2002, 19h55

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