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

Utilisateur anonyme
 
salut,

rtfm! en entier !
0
gnugo
 
Salut,
rtfm de ? Le man file, je l'ai lu en entier, j'ai pas trouvé
0
gnugo
 
Je précise que j'ai juste besoin de détecter si le texte est en UFT-8 ou non
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
gnugo
 
C'est pas mieux avec -i :(

$ echo "<html>&é</html>" | file -bi -
text/html

$ echo "<html>&é</html>" | file -i -
/dev/stdin: text/html
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
gnugo
 
Hum merci :D
Je vais chercher mais ça m'a l'air compliqué,
1ers essais infructueux, toujours le même comportement
0
gnugo
 
Sinon s'il y a une solution en perl ou python, je suis preneur
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
0
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
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
gnugo
 
En fait ça ne marche pas, parfois perl de décode pas selon l'environnement
0