Caractères spéciaux sous unix

Résolu

Bonjour,

J'exporte un tableau sous Unix à partir d'un base oracle. Dans la base, il y a des noms et des mots avec des "é" et « à ». Quand je lis mon fichier en csv sous Unix ces lettres se transforment en "é". Par exemple : "Réalisée" deviens "Réalisée".

J'ai essayé :

iconv -f IBM-1252 -t UTF-8 MONFICHIER.csv

... mais j'ai toujours le même problème

Si quelqu'un a une idée

Merci beaucoup


Windows / Firefox 106.0

10 réponses

  1. Contributeur

    hello

    que répond

    file MONFICHIER.csv
    0
    1. Déjà merci pour la réponse.

      Voici le résultat de la commande :

      $ file MONFICHIER.csv
      ​​​​​​​MONFICHIER.csv: ascii text
      0
      1. Modérateur

        Bonjour,

        Peux-tu partager un csv minimal qui met en évidence le problème sur un site comme https://www.cjoint.com/.

        Tu as effectivement un problème d'encodage et ta commande iconv n'utilise probablement pas le bon encodage source ou cible. Côté Linux je te recommande de toujours n'utiliser que de l'UTF-8. Typiquement la commande locale devrait retourner :

        (mando@silk) (~) $ locale
        LANG=fr_FR.UTF-8
        LANGUAGE=
        LC_CTYPE="fr_FR.UTF-8"
        LC_NUMERIC="fr_FR.UTF-8"
        LC_TIME="fr_FR.UTF-8"
        LC_COLLATE="fr_FR.UTF-8"
        LC_MONETARY="fr_FR.UTF-8"
        LC_MESSAGES="fr_FR.UTF-8"
        LC_PAPER="fr_FR.UTF-8"
        LC_NAME="fr_FR.UTF-8"
        LC_ADDRESS="fr_FR.UTF-8"
        LC_TELEPHONE="fr_FR.UTF-8"
        LC_MEASUREMENT="fr_FR.UTF-8"
        LC_IDENTIFICATION="fr_FR.UTF-8"
        LC_ALL=

        Par ailleurs, plutôt que de passer par iconv pour corriger l'encodage a posteriori, c'est plutôt au moment d'interroger ta base Oracle que tu devrais spécifier l'encodage de ton fichier csv (voir ce lien).

        Bonne chance

        0
        1. Merci pour la réponse.

          Je enlevé le iconv , mais j'ai le même soucis , et pour la base , elle est pas interrogé par windows , mais en unix.

          0
          1. Modérateur

            Bonjour,

            • Comment l'interroges-tu (quel logiciel, quelle requête) ?
            • Peux-tu partager un exemple minimal de ton fichier csv ?
            • As-tu essayé cette solution ?

            Bonne chance

            0
            1. - la connexion est sur une base oracle 19c , via sqlplus

              - la requette :

              SELECT '1;','2;','3;',.......,'n;'  FROM ZT00 T00,
              table1,
              table2,
              table3,

              ......

              dans le champs 3 et 4 il y'a l'info : "realisée" et "présent"

              qui sont correctement mentionnés avec les "é"

              je redirige vers un fichier MONFICHIER.csv , mais dans mon fichier que j'ouvre sous unix , je vois les caracteres "é" a la place des "é"

              - exemple du fichier :

              NOM   Prenom   lieu  STATUT   STATUT             ANNEE

              X          X      X         Réalisée     Présent              2020

              - pour tester la solution , je ne sais pas ou placer le "'UTF8', 'WE8MSWIN1252')" , j'ai tellement de champs :-( 

              0
              1. Modérateur

                Bonjour,

                je redirige vers un fichier MONFICHIER.csv , mais dans mon fichier que j'ouvre sous unix , je vois les caracteres "é" a la place des "é"

                Peux-tu préciser comment tu procèdes pour faire cette redirection ?

                Peux-tu partager ton fichier CSV (au moins quelques lignesà sur cjoint qui met le problème en évidence, comme demandé dans le message #3 ?

                0
                1. spool MONFICHIER.csv

                  SELECT '1;','2;','3;',.......,'n;'  FROM ZT00 T00,
                  table1,
                  table2,
                  table3,

                  ......

                  spool off

                  mis un exemple de fichier dans : https://www.cjoint.com/c/LKkpKuEB2Nq

                  0
                  1. Modérateur

                    Bonjour,

                    Peux-tu partager le fichier csv que tu as généré plutôt qu'un export excel ?

                    En copiant collant le contenu de ton fichier excel dans un fichier Excel j'ai obtenu ceci :

                    (mando@silk) (~) $ cat toto.csv 
                    NOM     Prenom        STATUT_SESSION     STATUT_STAGIAIRE        ANNEE_STAGE
                    Pierre  Dupond   Réalisée      Présent 2020
                    Michel  LEMOINE  Réalisée      Présent 2020
                    Marie   TALEU    Réalisée      Présent 2020

                    Vu la tête des caractère, ça ressemble à du CP1252 (Unicode) converti à tort en UTF-8 deux fois de suite. Et en faisant la transformation inverse deux fois, j'arrive à récupérer les bons caractères :

                    (mando@silk) (~) $ iconv -f UTF-8 -t CP1252 toto.csv | iconv -f UTF-8 -t CP1252
                    NOM     Prenom        STATUT_SESSION     STATUT_STAGIAIRE        ANNEE_STAGE
                    Pierre  Dupond   Réalisée            Présent    2020
                    Michel  LEMOINE  Réalisée            Présent    2020
                    Marie   TALEU    Réalisée            Présent    2020

                    Pour récupérer le fichier tu peux donc lancer :

                    (mando@silk) (~) $ iconv -f UTF-8 -t CP1252 toto.csv | iconv -f UTF-8 -t CP1252 > tata.csv
                    
                    (mando@silk) (~) $ cat tata.csv 
                    NOM     Prenom        STATUT_SESSION     STATUT_STAGIAIRE        ANNEE_STAGE
                    Pierre  Dupond   Réalisée            Présent    2020
                    Michel  LEMOINE  Réalisée            Présent    2020
                    Marie   TALEU    Réalisée            Présent    2020
                    
                    (mando@silk) (~) $ file tata.csv 
                    tata.csv: Unicode text, UTF-8 text

                    Je ne connais pas oracle dans le détail, mais clairement, l'encodage utiliser par ta commande SPOOL n'est pas le bon. Je t'invite donc à regarder cette discussion.

                    Bonne chance

                    0
                    1. Bonjour ,

                      Merci beaucoup !

                      Ça fonctionne , juste comme mon fichier contient beaucoup plus de ligne que ça , j'ai du faire en 2 fois

                      Merci beaucoup et bonne journée

                      0