Compilation de tous. Allez dans le répertoire, créez dir2utf8.sh
:
#!/bin/bash
# converting all files in a dir to utf8
for f in *
do
if test -f $f then
echo -e "\nConverting $f"
CHARSET="$(file -bi "$f"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$f" -o "$f"
fi
else
echo -e "\nSkipping $f - it's a regular file";
fi
done
Peut-être cherchez-vous enca
:
Enca est un analyseur de jeu de caractères extrêmement naïf. Il détecte le jeu de caractères et l'encodage des fichiers texte et peut également les convertir en d'autres encodages à l'aide d'un convertisseur intégré ou de bibliothèques et d'outils externes tels que libiconv, librecode ou cstocs.
Actuellement, il prend en charge le biélorusse, le bulgare, le croate, le tchèque, l'estonien, le hongrois, le letton, le lituanien, le polonais, le russe, le slovaque, le slovène, l'ukrainien, le chinois et certains encodages multioctets indépendamment de la langue.
Notez qu'en général, la détection automatique de l'encodage actuel est un processus difficile (la même séquence d'octets peut être un texte correct dans plusieurs encodages). enca
utilise des heuristiques basées sur la langue que vous lui dites de détecter (pour limiter le nombre d'encodages). Vous pouvez utiliser enconv
pour convertir des fichiers texte en un seul encodage.
Vous pouvez obtenir ce dont vous avez besoin en utilisant le fichier standard gnu utils et awk. Exemple :
file -bi .xsession-errors
me donne :"text/plain; charset=us-ascii"
donc file -bi .xsession-errors |awk -F "=" '{print $2}'
me donne"us-ascii"
Je l'utilise dans des scripts comme ceci :
CHARSET="$(file -bi "$i"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$i" -o outfile
fi