Voici un petit script qui pourra vous être utile. Il permet de convertir des fichiers encodés en ISO-8859-1, vers de l’UTF-8. Pratique pour certains problèmes d’encodages de caractères.

Pré-requis

Assurez-vous que le paquet « recode » est installé :

sudo apt-get install recode

Mise en place du script

Copier le script à la racine de votre projet (ex : « /var/www/monsiteweb/ »), et n’oubliez pas de lui donner le droit d’exécution :

sudo chmod +x ./recodeifneeded

Utilisation du script

Une fois les étapes précédentes effectuées, restez sur le dossier racine de votre projet.

Pour tous les fichiers :

find . -name "*.*" -exec ./recodeifneeded utf-8 {} \;

Pour les fichiers PHP :

find . -name "*.php" -exec ./recodeifneeded utf-8 {} \;

Pour les fichiers phtml :

find . -name "*.phtml" -exec ./recodeifneeded utf-8 {} \;

Le script ne va prendre que les fichiers encodés en ISO-8859-1 pour les convertir en UTF-8.
Il ne convertira pas les fichiers convertis en US-ASCII étant donné que c’est un sous-ensemble de l’encodage UTF-8.
Il ignorera aussi les fichiers liés au SVN, et les fichiers n’étant pas encodés en ISO-8859-1

Le script

Voici la dernière partie et la plus important, le script !
Il est simpliste et pas forcément optimisé, mais pour ce dont j’avais besoin il fait l’affaire, à vous de le modifier à votre guise !

#!/bin/bash

# Find the current encoding of the file
encoding=$(file -i "$2" | sed "s/.*charset=\(.*\)$/\1/")

# Some file does not return charset, so we chek if the : character is in the string
# If it is, we set the encoding to undefined
other=$(echo "${encoding}" | grep ":")
if [ ! "${other}" == "" ] 
then
	encoding='undefined'
fi

# Check if it's svn file
svn=$(echo "$2" | grep ".svn")

if [ ! "$1" == "${encoding}" ] && [ "${svn}" == "" ] 
then
	# If file is in us-ascii, it's a subelement of utf-8, so we don't need to recode
	if [ ! ${encoding} == 'us-ascii' ] || [ ! $1 == 'utf-8' ]
	then
		# Get only iso-8859-1 files, remove this condition if you want
		if [ $encoding == 'iso-8859-1' ] 
		then
			# Encodings differ, we have to encode
			echo "recoding from ${encoding} to $1 file : $2"
			recode ${encoding}..$1 $2
		fi
	fi
fi

 

Encoder des fichiers ISO-8859-1 en UTF-8 sous Ubuntu
Taggé sur :            

2 thoughts on “Encoder des fichiers ISO-8859-1 en UTF-8 sous Ubuntu

  • 05/02/2015 à 14:39
    Permalink

    Je m’en suis servi hier sur un projet, et quand j’ai commité j’ai vu les diffs avec les accents qui étaient mal encodés.

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous utilisons des cookies afin de nous assurer de vous proposer la meilleure expérience sur ce site.
Ok