Outils pour utilisateurs

Outils du site


linux:utf8 (lu 24890 fois)

Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
linux:utf8 [25-02-2012 22:32]
edmc73 Page moved from linux:utf8 to linux:edmc73:linux:utf8
linux:utf8 [03-05-2016 14:16] (Version actuelle)
edmc73 [Fichier hybride]
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 47: Ligne 87:
 |ucs-4 |Unicode UCS-4 encodé sur 32 bits (ISO/IEC 10646-1)| |ucs-4 |Unicode UCS-4 encodé sur 32 bits (ISO/IEC 10646-1)|
 |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
 +
 +===== Caractères problématiques =====
 +
 +Certains caractères issue de traitement de texte ou de système d'exploitation genre MacOS génère des caractères qui font planter les manipulations d'insertion de données dans des bases de données genre postgresql..
 +
 +Bref, il faut alors faire des rechercher/remplacer sur ces caractères spécifiques.
 +
 +Caractères spéciaux courant à rechercher
 +
 +  * U+2018 (Left Single Quotation Mark)
 +<html>&#8216;</html>
 +
 +  * U+201C (left double quotation mark)
 +<html>&#8220;</html>
 +
 +  * U+201D (right double quotation mark)
 +<html>&#8221;</html>
 +
 +  * U+AB (left double angle quotes)
 +<html>&#171;</html>
 +
 +  * U+BB (right double angle quotes)
 +<html>&#187;</html>
 +
 +  * U+2026 (horizontal ellipsis) 0xe280a6
 +<html>&#8230;</html>
  
  
 +On peut aussi afficher le caractère dans postgresql avec la requête
 +  select convert_from('\xe280a6'::bytea, 'utf-8');
 +si vous avez une vieille version
 +  select convert_from(E'\xe2\x80\xa6'::bytea, 'utf-8');
linux/utf8.1330205554.txt.gz · Dernière modification: 04-04-2013 22:05 (modification externe)