Réencoder des fichiers en UTF-8

le 23/03/2020 dans Linux #console#Linux#Raspberry Pi#terminal

Régulièrement les sous-titres (téléchargés en ligne de commande) ne sont pas pris en compte par omxplayer que j'utilise sur mon Raspberry Pi ; la raison ? Ils ne sont tout simplement pas en UTF-8...

J'ai longtemps utilisé la commande recode mais depuis une réinstallation complète d'une Raspbian Buster sur mon Raspberry Pi 2, et d'une modification du montage des disques de mon NAS, je rencontre des problèmes de permissions...

Du coup, grâce à deux contributions d'une même conversation (celles de Pierre Fabier et d'un inconnu), j'ai produit un petit script.

Si ce n'est pas déjà fait, on crée un répertoire bin/ dans notre home :

mkdir ~/bin

puis on y crée notre script :

nano ~/bin/toutf8

dans lequel on insère :

#!/bin/bash
# Find the current encoding of the file
encoding=$(uchardet "$1")

if [ ! "UTF-8" == "${encoding}" ]
  then
  # Encodings differ, we have to encode
    echo "recoding from ${encoding} to UTF-8 file : $1"
    vim +'set nobomb | set fenc=utf8 | x' "$1"
else
    echo "Already utf8 encoding"
fi

On le rend exécutable :

chmod +x ~/bin/toutf8

Pour le faire fonctionner, il convient bien d'avoir installé les paquets uchardet (plus fiable que la commande file -i qui renvoie régulièrement des unknown-8bit impossible à passer en argument de recode ou à traiter par ce script) et bien sûr vim :

sudo apt install uchardet vim

Ensuite, où que vous vous trouviez, vous pourrez appeler le script simplement :

toutf8 nom_du_fichier