Outils pour utilisateurs

Outils du site


linux:utf8 (lu 16434 fois)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
linux:utf8 [14-02-2012 22:29]
edmc73 créée
linux:utf8 [19-05-2014 15:05]
edmc73
Ligne 1: Ligne 1:
 ====== UTF8 ====== ====== UTF8 ======
 +
 +Si vous avez décidé de passer votre serveur en UTF8, la plupart des fichiers textes/html etc..  contenant des accents deviendront difficilement lisible.
 +
 +Dans mon cas d'un serveur web, je devais réencoder tous les fichiers du site.
 +
 +Pour cette manip, mon choix s'est tourné sur la commande **recode** mais étant données que j'avais déjà commencer à réencoder certain fichier, je devais faire attention à ne pas réencoder un fichier déjà réencodé..
 +
 +J'avais donc créé un petit script (dispo au dernier chapitre de cette page) permettant de tester le format du fichier puis de l'encoder si nécessaire.
 +
  
 ===== Configuration ===== ===== Configuration =====
Ligne 7: Ligne 16:
 Choisissez alors fr_FR.UTF8 Choisissez alors fr_FR.UTF8
  
-===== Anciens fichiers =====+===== Connaitre l'encodage d'un fichier ===== 
 + 
 +Avec la commande **file** qui permet de connaitre le type d'un fichier et en rajoutant l'option **-i** 
 + 
 +  # file plan.php 
 +  plan.php: HTML document text 
 +  # file -i plan.php 
 +  plan.php: text/html; charset=iso-8859-1 
 +  # file -i index.php 
 +  index.php: text/x-php; charset=utf-8 
 + 
 +===== Convertir avec iconv ===== 
 +**iconv** permet de convertir un fichier et renvoie le résultat sur la sortie standard ce qui n'est pas forcément pratique pour réencoder plusieurs fichiers d'un site web par exemple. 
 + 
 +  iconv -f iso-8859-1 -t utf-8 ancienFichier > nouveauFichier    # vers UTF-8 
 +  iconv -f utf-8 -t iso-8859-1 ancienFichier > nouveauFichier    # vers latin-1 
 +   
 +===== Convertir avec recode ===== 
 +**recode** réencode le fichier qu'on lui soumet. 
 + 
 +  # file -i plan.php 
 +  plan.php: text/html; charset=iso-8859-1 
 +  # recode iso-8859-1..utf-8 plan.php 
 +  # file -i plan.php 
 +  plan.php: text/html; charset=utf-8 
 + 
 +On peut réencoder plusieurs fichiers d'un coup. 
 +  # recode iso-8859-1..utf-8 * 
 +   
 +<note warning>Attention à ne pas réencoder plusieurs fois un fichier déjà réencodé ! Sinon votre fichier va être complètement pollué de caractères bizard.</note> 
 + 
 +===== Convertir avec vim =====
 Quand vous ouvrez un fichier non utf8 avec vim, la mention **[converti]** apparait en bas. Quand vous ouvrez un fichier non utf8 avec vim, la mention **[converti]** apparait en bas.
  
Ligne 21: Ligne 61:
   :write ++enc=utf-8 russe.txt   :write ++enc=utf-8 russe.txt
  
-===== Les types d’encodage =====+==== Les types d’encodage supporté par vim ====
 |latin1 |caractères 8-bits (ISO-8859-1)| |latin1 |caractères 8-bits (ISO-8859-1)|
 |iso-8859-N |variante ISO-8859 (N = 2 à 15)| |iso-8859-N |variante ISO-8859 (N = 2 à 15)|
Ligne 34: Ligne 74:
 |euc-kr |coréen (Unix uniquement)| |euc-kr |coréen (Unix uniquement)|
 |cp936 |chinois simplifié (Windows uniquement)| |cp936 |chinois simplifié (Windows uniquement)|
-|euc-cn |chinois simplifié (Unix uniquement)|+|euc-cn |chinois simplifié (Unix uniquement)|U+2018 (Left Single Quotation Mark)
 |cp950 |chinois classique (sur Unix, alias pour big5)| |cp950 |chinois classique (sur Unix, alias pour big5)|
 |big5 |chinois classique (sur Windows, alias pour cp950)| |big5 |chinois classique (sur Windows, alias pour cp950)|
Ligne 48: Ligne 88:
 |ucs-4le |comme ucs-4, en petit boutiste| |ucs-4le |comme ucs-4, en petit boutiste|
  
 +===== Script pour réencoder les fichiers d'un site web =====
 +Ce script permet d'encoder des fichiers en utf8.\\
 +Modifiez les variables **chemin** et **extension** suivant ce que vous voulez faire.\\
 +Rendez exécutable le script avec **chmod +x encode_utf8.bash**\\
 +Puis lancez le **./encode_utf8.bash**
 +
 +Le script va analyser tous les fichiers du répertoire et des sous répertoire que vous avez spécifié.\\
 +Si l'encodage est **iso-8859-1**, la commande **recode** encode le fichier en utf8.\\
 +Si l'encodage est **utf-8**, rien n'est fait.\\
 +Si l'encodage est différent, le script vous demandera si vous voulez tenter d'encoder le fichier en **utf-8**.
 +
 +D'après mes tests, certains fichiers apparaissent en **us-ascii** et je ne suis pas parvenu à les encoder en **utf-8** mais ces fichiers ne semblent pas poser de problèmes.
 +
 +<file bash encode_utf8.bash>
 +#!/bin/bash
 +
 +# Renseigner le répertoire à traiter
 +chemin="/var/www/siteweb/"
 +extension="php|html|css|js"
 +
 +atraiter=`/usr/bin/find $chemin -regextype posix-extended -type f -iregex '.*\.('${extension}')$'`
 +
 +for i in $atraiter
 +do
 +        enc=`file --mime-encoding $i | awk '{ print $2 }'`
 +        if [ $enc = "iso-8859-1" ] ; then
 +                recode $enc..utf-8 $i
 +                echo -e "$i \\033[1;32m Conversion effectuée \\033[0;39m"
 +        elif [ $enc = "utf-8" ] ; then
 +                echo -e "$i \\033[1;36m Déjà en utf8 \\033[0;39m"
 +        else
 +                echo -e "\\033[1;31m /!\\ \\033[0;39m $i\nEncodage: $enc"
 +                PS3="> L'encodage de ce fichier n'est pas standard, voulez vous essayer de le convertir quand même en UTF8 ?"   # le prompt
 +                LISTE=("[o] oui" "[n]  non" # liste de choix disponibles
 +                select CHOIX in "${LISTE[@]}" ; do
 +                    case $REPLY in
 +                        1|o)
 +                        recode $enc..utf-8 $i
 +                        echo -e "\\033[1;32m Conversion effectuée \\033[0;39m"
 +                        break
 +                        ;;
 +                        2|n)
 +                        echo Aucun réencodage de fait.
 +                        break
 +                        ;;
 +                    esac
 +                done
 +        fi
 +done
 +
 +echo
 +</file>
 +
 +===== Mysql =====
 +
 +Soit vous réencodé toute la base comme détaillé sur ce site http://docs.moodle.org/19/fr/Convertir_votre_base_MySQL_en_UTF-8
 +
 +Soit vous faite la méthode comme moi qui consite à rajouter la ligne
 +  mysql_query("SET NAMES 'utf8'");
 +Dans votre fichier de connexion à la base.
 +
 +===== Réencoder des noms de fichiers avec des caractères bizarre =====
 +L'utilitaire qui va bien est **detox**
 +
 +Le plus simple, mettez dans un répertoire tous les avec des caractères bizarre et lancez la commande
 +  detox *
 +Le nom de vos fichiers sera lisible ;)
 +
 +Plein d'options dans le man http://linux.die.net/man/1/detox
 +
 +===== Fichier hybride =====
 +
 +Dans le cas de fichier mixte ou on retrouve plusieurs encode dufférent, le système est complètement perdu.
 +
 +Il faut alors faire des rechercher/remplacer sur des caractères spécifique souvent issue de Mac ou pas.
 +
 +Caractères spéciaux à rechercher
 +
 +  * U+2018 (Left Single Quotation Mark)
 +
  
 +(d'autre suivront au fure et à mesure que je galère..)
linux/utf8.txt · Dernière modification: 03-05-2016 14:16 de edmc73