Existe-t-il une commande Linux pour savoir si un fichier est UTF-8?

14

Les .inifichiers Joomla doivent être enregistrés au format UTF-8.

Après l'édition, je ne sais pas si les fichiers sont UTF-8 ou non.

Existe-t-il une commande Linux comme fileou quelques commandes qui diraient si un fichier est bien UTF-8 ou non?

Edward
la source
4
Vous ne pouvez pas dire l'encodage d'un fichier. Vous ne pouvez que faire une supposition intelligente. Vous pourriez surtout deviner juste, mais parfois les suppositions échouent. fileest un exemple de programme faisant des suppositions intelligentes.
Marco
1
@Marco: Il est cependant possible de vérifier s'il s'agit bien d'un UTF-8 valide. Il y a quelques encodages qui peuvent passer à tort comme valide UTF-8, mais il arrive presque jamais à la norme ISO-8859-𝒏 ou encodages Windows 125𝒏 / jeux de caractères.
user1686

Réponses:

28

Vous pouvez déterminer l'encodage du fichier avec la commande suivante:

file -bi filename
Rik
la source
3
@nicolas Pour MacOS, vous pouvez essayer file -I filename(-I est un i majuscule).
Rik
5
Est-ce que cela lit tout le fichier?
ctrl-alt-delor
2
@ kojow7 utf-8 n'a pas d'en-tête. ASCII pur (7 bits uniquement), est indiscernable de utf-8 (c'est le but, un en-tête causera toutes sortes de problèmes). Donc, si vous avez un fichier ASCII pour le premier Mo et qu'il n'a qu'un seul caractère UTF-8, vous ne le saurez pas, sauf si vous lisez le fichier entier.
ctrl-alt-delor
3
Cela ne devrait pas être accepté comme réponse. La commande 'file' ne fait pas cela; il ne lit qu'une partie du fichier et utilise des nombres magiques pour mieux deviner. À l'occasion, «fichier» peut et vous donnera une réponse incorrecte. Pour vérifier si un fichier passe un encodage tel que ascii, iso-8859-1, utf-8 ou autre, alors une bonne solution consiste à utiliser la commande 'iconv'.
Tim
1
Je l'ai testé et il peut échouer.
Tim
9

Il y a, utilisez la isutf8commande du paquet moreutils .

Source: Comment savoir si un fichier est encodé en UTF-8 ou non?


Pablo Olmos de Aguilera C.
la source
@davidpostill Je suis curieux, est-ce une mauvaise pratique de citer l'auteur dans la référence?
Pablo Olmos de Aguilera C.
Non. Cependant, c'est une bonne pratique de faire dire au lien où il me mène. Supposons que je ne lis que le texte bleu. Après la modification, je peux dire pourquoi et quand je dois cliquer dessus. Avant, je ne pouvais pas. (Ce n'est pas moi qui ai fait le montage mais je suis sûr à 94% que c'est de cela qu'il s'agissait.)
Hermann Döppes
Nice, et fonctionne bien avec find -type f -exec isutf8 {} +, car il cite également le nom de fichier. (Et avec l'utilisation find ... -exec ... +est également rapide)
Tomasz Gandor
2

N'utilisez pas la filecommande. Il n'inspecte pas l'intégralité du dossier, et il suppose essentiellement. Cela donne parfois des réponses incorrectes.

Vous pouvez vérifier si un fichier passe le codage UTF-8 comme ceci:

$ iconv -f utf8 <filename> -t utf8 -o /dev/null

Un code retour de zéro signifie qu'il passe UTF8. Un code retour différent de zéro signifie qu'il n'est pas UTF8 valide.

Il n'est pas possible de savoir si un fichier a été nécessairement exporté à l'aide d'un schéma de codage particulier, car certains schémas de codage se chevauchent. Pour ce faire, il faudrait que les métadonnées soient incorporées dans le fichier, et même alors, vous feriez confiance à la personne qui a généré ce fichier, plutôt que de le valider vous-même ... et vous devriez toujours le valider vous-même.

Tim
la source
0

Encore une autre façon est d'utiliser recode, qui se terminera avec une erreur s'il essaie de décoder UTF-8 et rencontre des caractères invalides.

if recode utf8/..UCS < "$FILE" >/dev/null 2>&1; then
    echo "Valid utf8 : $FILE"
else
    echo "NOT valid utf8: $FILE"
fi
mivk
la source