Detecter le charset

gnugo -  
 gnugo -
Bonjour,

Savez-vous comment détecter l'encodage d'une chaine de caractère sous linux ?
J'ai essayé avec file, mais ça ne me donne pas le charset sauf dans quelques rares cas :

echo "<html>&é</html>" | file -
/dev/stdin: HTML document text

Merci

6 réponses

  1. Utilisateur anonyme
     
    salut,

    rtfm! en entier !
    0
    1. gnugo
       
      Salut,
      rtfm de ? Le man file, je l'ai lu en entier, j'ai pas trouvé
      0
  2. gnugo
     
    Je précise que j'ai juste besoin de détecter si le texte est en UFT-8 ou non
    0
  3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Sur quel système ou distrib es-tu ?

    Parce que chez moi (mint) voilà ce que j'obtiens avec le code source de ce message d'une part et ton exemple d'autre part :

    $ file -b -i affich-26060402-detecter-le-charset.htm 
    text/html; charset=iso-8859-1
    
    $ file -b --mime-encoding affich-26060402-detecter-le-charset.htm 
    iso-8859-1
    
    $ echo "<html>&e</html>" | file -b --mime-encoding - 
    us-ascii
    
    $ echo "<html>&é</html>" | file -b --mime-encoding - 
    utf-8
    
    $

    0
    1. gnugo
       
      Effectivement mes résultats sont différents.
      Hélas, je ne suis pas root sur ce serveur et ne peux pas mettre à jour/installer des paquets

      $ cat /etc/redhat-release
      CentOS release 5.4 (Final)
      
      $ file -v
      file-4.17
      magic file from /usr/share/file/magic
      
      $ echo "<html>&é</html>" | file -b --mime-encoding -
      file: unrecognized option '--mime-encoding'
      Usage: file [-bcikLhnNsvz] [-f namefile] [-F separator] [-m magicfiles] file...
             file -C -m magicfiles
      Try 'file --help' for more information.
      
      $ echo "<html>&é</html>" | file -b --mime -
      text/html
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Ok tu n'as pas l'option "--mime-encoding", mais tu as l'option "-i" :

      Extrait :
      -i
      		
      If a file is a regular file, do not attempt to classify the type of the file further, but identify the file as specified in the STDOUT section.
      0
    3. gnugo
       
      C'est pas mieux avec -i :(

      $ echo "<html>&é</html>" | file -bi -
      text/html
      
      $ echo "<html>&é</html>" | file -i -
      /dev/stdin: text/html
      0
    4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Il ne te reste plus qu'à construire ton propre fichier "/etc/magic" pour satisfaire tes besoins...

      Je te laisse chercher sur le Net comment le faire ;-)
      0
    5. gnugo
       
      Hum merci :D
      Je vais chercher mais ça m'a l'air compliqué,
      1ers essais infructueux, toujours le même comportement
      0
  4. gnugo
     
    Sinon s'il y a une solution en perl ou python, je suis preneur
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    0
    1. gnugo
       
      Merci
      J'avais justement commencé à regarder ce script
      Mais il ne marche pas avec l'ISO8859-1, ça génère une erreur. Mais comme je n'ai besoin que de savoir si UTF8 ou non ça pourrait suffire.
      Ça me plait pas de procéder comme ça (et de devoir faire un appel a perl pour si peu), mais bon si j'ai pas d'autre choix...Je vais déjà faire un truc avec ça alors :]
      0
  7. gnugo
     
    J'ai donc intégré ce code à mon script, et ça fonctionne pour l'instant
    Mais j'ai peur que dans certains cas, il puisse avoir un comportement tout autre :/

    Pouvez-vous me donner votre avis ?

    function convertir_utf8 {
    if perl -e "use Encode::Guess; if(ref(guess_encoding(<>))) { exit 1; } else { exit 0; }"<<<"$*"; then iconv -f iso-8859-1 -t utf-8 <<<"$*"; else echo "$*"; fi
    }
    En entrée de cette fonction : du texte (tous caracères possibles, multiligne possible), soit en ISO-8859-1, soit en UTF8.
    Et ça doit me sortir le même texte, en UTF8.

    J'ai peur du comportement de guess_encoding : parfois il m'affiche des messages d'erreur "unknow encoding" sur certaines lignes (on dirait quil fait un traitement par ligne)
    J'ai peur aussi que le iconv ait un comportement innatendu dans certains cas et ne transforme pas le texte (renvoie texte vide) ou le fasse mal

    Cette façon de faire me parait mauvaise
    Qu'en dites-vous?
    0
    1. gnugo
       
      En fait ça ne marche pas, parfois perl de décode pas selon l'environnement
      0