Detecter le charset

Fermé
gnugo - 12 sept. 2012 à 19:26
 gnugo - 15 sept. 2012 à 10:19
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
13 sept. 2012 à 03:08
salut,

rtfm! en entier !
0
Salut,
rtfm de ? Le man file, je l'ai lu en entier, j'ai pas trouvé
0
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
13 sept. 2012 à 09:19
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
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
13 sept. 2012 à 10:05
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
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
13 sept. 2012 à 10:33
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
Hum merci :D
Je vais chercher mais ça m'a l'air compliqué,
1ers essais infructueux, toujours le même comportement
0
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 18719 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 mai 2024 5 615
13 sept. 2012 à 15:22
0
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
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
En fait ça ne marche pas, parfois perl de décode pas selon l'environnement
0