Ci-dessous, les différences entre deux révisions de la page.
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' | ||
+ | |||
+ | J' | ||
+ | |||
===== Configuration ===== | ===== Configuration ===== | ||
Ligne 7: | Ligne 16: | ||
Choisissez alors fr_FR.UTF8 | Choisissez alors fr_FR.UTF8 | ||
- | ===== Anciens | + | ===== Connaitre l' |
+ | |||
+ | Avec la commande **file** qui permet de connaitre le type d'un fichier et en rajoutant l' | ||
+ | |||
+ | # 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 | ||
+ | |||
+ | iconv -f iso-8859-1 -t utf-8 ancienFichier > nouveauFichier | ||
+ | iconv -f utf-8 -t iso-8859-1 ancienFichier > nouveauFichier | ||
+ | |||
+ | ===== 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> | ||
+ | |||
+ | ===== 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 |
|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' | ||
+ | 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 **./ | ||
+ | |||
+ | Le script va analyser tous les fichiers du répertoire et des sous répertoire que vous avez spécifié.\\ | ||
+ | Si l' | ||
+ | Si l' | ||
+ | Si l' | ||
+ | |||
+ | D' | ||
+ | |||
+ | <file bash encode_utf8.bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # Renseigner le répertoire à traiter | ||
+ | chemin="/ | ||
+ | extension=" | ||
+ | |||
+ | atraiter=`/ | ||
+ | |||
+ | for i in $atraiter | ||
+ | do | ||
+ | enc=`file --mime-encoding $i | awk '{ print $2 }'` | ||
+ | if [ $enc = " | ||
+ | recode $enc..utf-8 $i | ||
+ | echo -e "$i \\033[1;32m Conversion effectuée \\033[0; | ||
+ | elif [ $enc = " | ||
+ | echo -e "$i \\033[1;36m Déjà en utf8 \\033[0; | ||
+ | else | ||
+ | echo -e " | ||
+ | PS3="> | ||
+ | LISTE=(" | ||
+ | select CHOIX in " | ||
+ | case $REPLY in | ||
+ | 1|o) | ||
+ | recode $enc..utf-8 $i | ||
+ | echo -e " | ||
+ | break | ||
+ | ;; | ||
+ | 2|n) | ||
+ | echo Aucun réencodage de fait. | ||
+ | break | ||
+ | ;; | ||
+ | esac | ||
+ | done | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | echo | ||
+ | </ | ||
+ | |||
+ | ===== Mysql ===== | ||
+ | |||
+ | Soit vous réencodé toute la base comme détaillé sur ce site http:// | ||
+ | |||
+ | Soit vous faite la méthode comme moi qui consite à rajouter la ligne | ||
+ | mysql_query(" | ||
+ | Dans votre fichier de connexion à la base. | ||
+ | |||
+ | ===== Réencoder des noms de fichiers avec des caractères bizarre ===== | ||
+ | L' | ||
+ | |||
+ | 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' | ||
+ | |||
+ | ===== Caractères problématiques ===== | ||
+ | |||
+ | Certains caractères issue de traitement de texte ou de système d' | ||
+ | |||
+ | Bref, il faut alors faire des rechercher/ | ||
+ | |||
+ | Caractères spéciaux courant à rechercher | ||
+ | |||
+ | * U+2018 (Left Single Quotation Mark) | ||
+ | < | ||
+ | |||
+ | * U+201C (left double quotation mark) | ||
+ | < | ||
+ | |||
+ | * U+201D (right double quotation mark) | ||
+ | < | ||
+ | |||
+ | * U+AB (left double angle quotes) | ||
+ | < | ||
+ | |||
+ | * U+BB (right double angle quotes) | ||
+ | < | ||
+ | |||
+ | * U+2026 (horizontal ellipsis) 0xe280a6 | ||
+ | < | ||
+ | On peut aussi afficher le caractère dans postgresql avec la requête | ||
+ | select convert_from(' | ||
+ | si vous avez une vieille version | ||
+ | select convert_from(E' |