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

Répondre à Pierre FAY Annuler la réponse

Votre adresse e-mail 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