logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 05-02-2014 17:01:49

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

[rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Bonjour les debianistes !

J'ai une grosse galère sur un serveur de prod suite à un passage de Squeeze à Wheezy le week-end dernier, au niveau des charset / locales.

Au niveau de la mise à jour, RAS niveau message d'erreur, le source liste est on ne se peut plus minimaliste:


#cat /etc/apt/sources.list
deb http://debian.bhs.mirrors.ovh.net/debian/ wheezy main
deb-src http://debian.bhs.mirrors.ovh.net/debian/ wheezy main
deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main
 



Et depuis la mise à jour, c'est la galère avec un vieil os commerce (en cours de refonte), paramétré en charset iso-8859-1 et dont les BDD sont en latin1_swedish_ci

pour isoler le pb, j'ai fait au plus simple... voici un bout de code de test:


<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html dir="ltr" lang="fr">
<head>
  <!--meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"-->
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?php print_r($_POST); ?>
  <form name="insert_product" action="http://monsite.com/test.php" method="post" enctype="multipart/form-data">  
    <input type="text" name="truc">
    <input type="image" src="button_preview.gif" border="0" alt="Pr&eacute;visualiser" title=" Pr&eacute;visualiser ">
  </form>
</body>
 



Le résultat est:
- si je met le charset UTF-8, j'ai bien mes accents qui passent.
- si je passe le charset en iso-8859-1 j'ai le droit à du "BAD+9000 BAD+0 BAD+8000 ..." à la place des accents.

Alors la solution UFT8, idéalement, ça serait parfait, sauf que j'aimerais bien m'économiser la conversion de la BDD et de X fichiers, car quand je passe le site en UTF8, ben forcément, c'est tout ce qui était en BDD ou en fichier qui m'affiche le magnifique "? dans le carré" :-/

Du coup je voudrais simplement que ça fonctionne comme juste avant la mise à jour, et comme ça fonctionne sur ma machine de dev, avec une configuration des locales (qui me semble) équivalentes !!

J'ai bien du faire environ 15000 fois du "dpkg-reconfigure locales" en essayant différentes options,  bidouillé le /etc/locale.gen suivit de usr/sbin/locale-gen, vérifié mes apache2.conf, php.ini, .htaccess, ils sont tous (niveau charset) identique à ma version locale fonctionnelle...

Quelques données (les résultats sont les même sur ma machine de dev sur laquelle cela fonctionne)


$cat /etc/locale.gen    

fr_FR ISO-8859-1
fr_FR.UTF-8 UTF-8
#fr_FR.UTF-8@euro UTF-8
fr_FR@euro ISO-8859-15
#en_US.UTF-8 UTF-8


$locale

LANG=fr_FR.UTF-8
LANGUAGE=
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=

$locale -a

C
C.UTF-8
français
french
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8
POSIX
 



j'ai également réinstallé le paquet "locales", et fait des reload d'apache à chaque bidouille...
j'ai l'impression que c'est le charset iso-8859-1 qui n'est pas bien installé/configuré, mais je n'ai pas trouvé comment faire pour le réinstaller.

Bref, rien y fait, et google n'a pas été mon amis sur ce coup là, alors si vous avez des pistes, ou mieux une solution, un grand merci d'avance de m'éviter une conversion lourde du site...

Dernière modification par trogloman (06-02-2014 03:03:45)

Hors ligne

#2 05-02-2014 18:01:36

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Salut,
Il s'agit des headers envoyés par le serveur apache2 qui priment sur ceux donnés par la page web.

Fichier : /etc/apache2/apache2.conf
Rajouter / modifier :

AddDefaultCharset UTF-8


Pour de l'utf-8 par défaut, et je te laisse deviner quoi pour de l'iso-8859-1 smile


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#3 05-02-2014 18:24:09

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Merci @captnfab, mais ça serait trop simple si ça marchait avec ça ;-)

J'ai déjà testé le forcing via apache/ htaccess/ php.ini, dans tous les cas, il n'y a pas de soucis, l'encodage iso-8859-1 est "théoriquement" pris en compte. c'est bien ce que j'obtiens dans les réponses meta du serveur, et les textes encodées depuis la BDD ou fichier en iso8859-1 s'affichent correctement.

MAIS les p***** d'accents issus d'un champs de formulaire ne passent pas :'( :'( :'(

Je n'ai jamais croisé un résultat aussi étrange :-/ et j'ai vraiment l'impression que c'est la librairie ou je ne sais quoi correspondant au format iso-8859-1 qu'il faudrait réinstaller, mais comment ? du genre debian n'arrive pas a convertir le caractère ? il ne trouve pas de correspondance ??? pourtant ils y sont ces accents en iso8859 :-/

j'ai essayé des locate iso-8859-1 et dérivé pour voir s'il n'y avait pas un éventuel fichier que je pourrais transférer de mon poste au serveur, mais j'ai rien trouvé de convainquant ...

Une autre piste peut être ?

Hors ligne

#4 05-02-2014 18:57:18

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Donc, si les headers sont bons, que les fichiers sont bien encodés comme ils le prétendent, que les headers html sont bons, et que l'encodage précisé par le formulaire est bon, le problème ne vient pas du serveur web.
Peut-être de la connexion entre php et mysql ? Ou de l'encodage de la bdd ?

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#5 05-02-2014 19:07:30

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

non, la liaison php et/ou mysql est hors de cause, car dans mon test on ne se peut plus minimaliste, je fait juste un print_r() de mon $_POST et ça ne fonctionne pas...


<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html dir="ltr" lang="fr">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 </head>
<body>
<?php print_r($_POST); ?>
  <form name="insert_product" action="http://monsite.com/test.php" method="post" enctype="multipart/form-data">  
    <input type="text" name="truc">
    <input type="image" src="button_preview.gif" border="0" alt="Pr&eacute;visualiser" title=" Pr&eacute;visualiser ">
  </form>
</body>
 



Si je passe le metachar de ce code en utf-8, mon print_r() m'affiche bien les accents.
En l'état j'ai des "BAD + Numéro"

C'est vraiment la transmission des data via le post du formulaire qui n'est pas convertie / prise en compte en iso8859 :-/

Hors ligne

#6 05-02-2014 19:11:16

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

<form name="insert_product" action="http://monsite.com/test.php" method="post" enctype="multipart/form-data" accept-charset="ISO-8859-1">

?


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#7 05-02-2014 19:18:01

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

bonne idée... mais non :'(


Array
(
    [truc] => test BAD+E7BAD+E8
 )
 

Hors ligne

#8 05-02-2014 19:19:32

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

T'as essayé avec plusieurs navigateurs ? Ça me semble pas mal louche là…

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#9 05-02-2014 19:27:21

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

on est d'accord sur la louv=chitude de la chose hmm

iceweasel / chrome / chrome en anonyme et opera...

Et le site fonctionne parfaitement en local avec ces même navigateurs...

avec quoi je peu reinstaller completement tout ce qui est lié à iso8859-1 ? un remove + purge de locales et une reinstall ?
car pour moi le pb est au niveau de l'OS, jamais vu un truc comme ça en 10 ans, et le pb est directement lié à l'upgrade à debian 7

Hors ligne

#10 05-02-2014 20:01:28

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Pour moi, ça vient de php ou d'apache2.
Tu es sûr d'avoir modifié le bon php.ini ?
Si c'est le cas, je ne vois pas…

Le paquet pour les locales est « locales ». Je doute que le purger / réinstaller ne change grand chose. Tu l'as reconfiguré ? (dpkg-reconfigure locales)

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#11 05-02-2014 20:26:37

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Ouaip, je l'ai ré configuré en testant plein de variantes,  idem via locales-gen

Je suis sur du php.ini que j'ai modifié,  et les confs apache et php sont similaires a ma conf locale... enfin pour tout se qui est charset ou qui pourrait etre lié.

J'ai depuis ton dernier message testé sur d'autres site du serveur, c'est la même :-/

Et moi aussi je sèche,  car c'est pas souvent que j'en arrive à ouvrir un post ;-)

Hors ligne

#12 05-02-2014 20:28:34

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

À mon avis, il y a un petit lutin dans ta carte réseau qui s'amuse à modifier les POST qui sortent juste pour te faire devenir fou smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#13 05-02-2014 20:41:02

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

J'en suis arrivé aux mêmes conclusions ... ou la NSA peut être. ?.
Le pire c'est qu'il y arrive !

Enfin, je suis parti pour bien m'amuser avec iconv cette nuit :-/

Hors ligne

#14 05-02-2014 20:46:51

nifseg
Adhérent(e)
Lieu : Dans une forêt
Distrib. : Debian Bullseye + Bookworm + Unix BSD
Noyau : 5.10.0 amd64 i386 + 6.1.0 amd64 i386
(G)UI : Gnome/Mate/Cinnamon/KDE sous FreeBSD
Inscription : 15-12-2013

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Faire très attention aux petits lutins qui s'immiscent dans sa Debian!!
C'est plus courant qu'on ne le pense. smile

L'important n'est pas la chute mais l'atterrissage...
Chapardeur de chocolat DF!!!
Admin un jour, admin toujours...
Utilisateur de plusieurs OS de type Unix comme GNU/Linux, Système BSD (FreeBSD, OpenBSD, NetBSD), Système Solaris (OpenIndiana et divers autres distrib du projet ILLUMOS) . I love Unix !!!

Hors ligne

#15 05-02-2014 20:59:14

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

J'en avait plein au début et ça faisait un moment qu'ils avaient quitté les lieux, pas de bol   :-P

Hors ligne

#16 05-02-2014 21:05:32

nifseg
Adhérent(e)
Lieu : Dans une forêt
Distrib. : Debian Bullseye + Bookworm + Unix BSD
Noyau : 5.10.0 amd64 i386 + 6.1.0 amd64 i386
(G)UI : Gnome/Mate/Cinnamon/KDE sous FreeBSD
Inscription : 15-12-2013

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

J'en ai quelque un loger dans ma carte graphique, ils s'amusent à saccader mon image durant la lecture de vidéos.(ah les coquins)
Mais bon on sy attache. big_smile

L'important n'est pas la chute mais l'atterrissage...
Chapardeur de chocolat DF!!!
Admin un jour, admin toujours...
Utilisateur de plusieurs OS de type Unix comme GNU/Linux, Système BSD (FreeBSD, OpenBSD, NetBSD), Système Solaris (OpenIndiana et divers autres distrib du projet ILLUMOS) . I love Unix !!!

Hors ligne

#17 05-02-2014 21:08:02

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

On les échange si tu veux ;-)

Hors ligne

#18 05-02-2014 21:15:22

nifseg
Adhérent(e)
Lieu : Dans une forêt
Distrib. : Debian Bullseye + Bookworm + Unix BSD
Noyau : 5.10.0 amd64 i386 + 6.1.0 amd64 i386
(G)UI : Gnome/Mate/Cinnamon/KDE sous FreeBSD
Inscription : 15-12-2013

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Je dois y réfléchir, ce n'est pas une déscision à prendre à la légère lol

L'important n'est pas la chute mais l'atterrissage...
Chapardeur de chocolat DF!!!
Admin un jour, admin toujours...
Utilisateur de plusieurs OS de type Unix comme GNU/Linux, Système BSD (FreeBSD, OpenBSD, NetBSD), Système Solaris (OpenIndiana et divers autres distrib du projet ILLUMOS) . I love Unix !!!

Hors ligne

#19 05-02-2014 21:25:00

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Mhhhh…
Ton php.ini, tu lui as dit d'utiliser quelle locale ?
Et dans /etc/environment tu l'as rien au sujet des locales ?
Dans ton vhost, tu n'as pas de surcharge du AddDefaultCharset ?

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#20 05-02-2014 21:38:34

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

T'as essayé avec nginx ou lighttpd, ils sont très biens aussi :-°

Mais en vrai, je suis vraiment curieux de savoir d'où vient ce blème.

J'imagine que tu as bien pensé à relancer apache2 à chaque modifications smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#21 05-02-2014 22:04:36

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

captnfab a écrit :

Mhhhh…
Ton php.ini, tu lui as dit d'utiliser quelle locale ?


Par défaut rien, et j'ai essayé de le forcer sur iso8859 sans résultat (avec ou sans alignement de la conf apache)

captnfab a écrit :

Et dans /etc/environment tu l'as rien au sujet des locales ?


Fichier vide sur ma machine comme sur le serveur problématique

captnfab a écrit :

Dans ton vhost, tu n'as pas de surcharge du AddDefaultCharset ?


Rien, et j'ai essayé mon script test sur un site avec la configuration la plus basique du monde, et sans .htaccess, c'est la même...

captnfab a écrit :

T'as essayé avec nginx ou lighttpd, ils sont très biens aussi :-°


Il parait mais non j'ai pas testé, et franchement pas le temps à y consacrer. J'ai pris mes habitudes avec l'indien, je lui suis fidèle !

captnfab a écrit :

Mais en vrai, je suis vraiment curieux de savoir d'où vient ce blème.


Et moi donc, mais bon, j'ai du café chaud, et je pense que je vais me lancer dans un rustinage à coup de fastidieuses conversion d'encodage :-(
Le temps d'essayer un dernier remove/purge/install sur locales... okazou

captnfab a écrit :

J'imagine que tu as bien pensé à relancer apache2 à chaque modifications smile


Ouaip, c'est devenu compulsif :-P

Le plus hallucinant est que je n'ai pas réussi a trouver vraiment de pb similaire sur google, alors que généralement :-D c'est du bug de créatif ça wink

Merci en tout cas smile

Hors ligne

#22 05-02-2014 22:17:00

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Tu nous dis si t'as l'éclair d'illumination magique smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#23 05-02-2014 22:20:54

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Ben déjà le remove/purge/install, ça change rien :-D

Je vais faire un reboot du serveur, la dernière chance...

Hors ligne

#24 06-02-2014 03:02:34

trogloman
Membre
Distrib. : debian squeeze
Noyau : 3.2.0-0.bpo.3-amd64
(G)UI : KDE4
Inscription : 06-11-2012
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

bon, ben ça, c'est fait... site passé de iso8859-1 à utf-8...

Pour ce qui est de la conversion des BDD, dump, passage par ce petit script conseillé par mon adminsys préféré, et c'est parfait !

Pour les fichiers, je suis parti de ce script que j'ai du bricoler un peu (version cow-boy).

Je l'ai limité aux fichiers .php (j'avais pas besoins d'autre fichier), a priori, le coté récursif ne fonctionne pas, et j'ai ajouté une copie backup des fichiers initiaux...
Je met ça là okazou...

#!/bin/bash
#
# Conversion de toute une arborescence d'un encodage dans un autre.
# Exemple d'utilisation :
#  mise a jour de sa distribution Linux de iso-8859-1 vers UTF-8
#
# Necessite : convmv et iconv
#
# Utilisation :
# $ ./convertEnc.sh Documents/Divers
#
# IMPORTANT : faites une copie de vos donnees et travaillez sur cette copie !!
# (Je ne peux etre tenu responsable si vous corrompez vos donnees, soyez prudents)
#
# Ce script ne demande qu'a etre ameliore...
#
## Protection contre les espaces (JacquesF -> guillemets autour des variables ou cela n'etait pas fait)
#
# Sebastien de Boissieu (c) 2006
# $Id: convertEnc.sh,v 1.8.2.1 2007/03/17 22:39:29 sebastien Exp $
# Licence : GPL 2

FROM="iso-8859-1"
TO="UTF-8"

echo "Conversion de $FROM en $TO"

# Procedure pour renommer un fichier si nom deja existant
renomme()
{
nbe=0
num="_$nbe"
nouvnom="$1"
while [ -e "$nouvnom" ];
do
# let nbe=nbe+1
  nbe=nbe+1
  num="_$nbe"
  nouvnom="$1$num"
done
export nouvnom
}

# Conversion recursive des noms de fichiers et repertoires
convert_names()
{
echo "Conversion des NOMS de fichiers et repertoires"
#convmv -r -f $FROM -t $TO --qfrom --qto --notest "$1"
convmv -r -f $FROM -t $TO --notest "$1"
echo ""
}

# Routine de conversion du contenu d'un fichier
do_convert()
{
fic="$1"
echo "  Fichier $fic"
# Lecture du type mime
encForm=`file -bi "$fic" | awk -F "charset=" '{ print $2 }'`
if [ !  "$encForm" = "" ]; then
  # le fichier possede un charset
  echo "  -> $encForm"
  if [ ! "$encForm" = "$TO" ]; then
    # ce charset est different de celui vise
    # nom du fichier converti temporaire
    renomme "$fic"_"$TO"
    nouv_fic="$nouvnom"
    # la conversion
    #daha:modif output   
    #iconv -f "$encForm" -t $TO "$fic" -o "$nouv_fic"
    iconv -f "$encForm" -t $TO "$fic" > "$nouv_fic"
        # reussite ou echec de la commande cruciale ?
        status=$?
      #  if [ $status == 0 ]; then
            # Pour conserver la/les date(s) :
            touch -r "$fic" "$nouv_fic"
            # Pour conserver le proprietaire
            chown --reference "$fic" "$nouv_fic"
            # pour conserver les droits :
            chmod --reference "$fic" "$nouv_fic"
      #daha: Backup de l'ancien fichier
      if [ ! -d "bck_iso" ]; then
    mkdir "bck_iso"
      fi 
      cp  "$fic" "bck_iso/$fic"
            # on ecrase l'ancien fichier par le nouveau
            if [ -w "$fic" ] ; then
                ### JacquesF
                ### Sur mes tests, si le fichier n'est pas accessible en ecriture
                ### un mv -f sur le fichier remplace pourtant celui-ci (droits d'ecriture dans le repertoire)
                mv -f "$nouv_fic" "$fic"
                #cp -f "$nouv_fic" "$fic"
            else
                echo "Le fichier $fic n'est pas accessible en ecriture"
                echo "Le fichier converti se nomme $nouv_fic"
            fi
       # else
        #    echo "   -> Echec: $nouv_fic corrompu ?"
        #    echo "             $fic conserve."
       # fi
  fi
fi

}

# Conversion recursive du contenu des fichiers texte
convert_content()
{
#echo "Conversion du contenu des fichiers"
if [ -d "$1" ]; then
  # c'est un repertoire
  if [ -x "$1" ]; then
    # On peut entrer dans le repertoire
    echo "Entree dans : $1"
        ### Protection si le repertoire contient un espace
    chemin_orig="`pwd`"
    cd -- "$1"
   
    # liste complete (avec fichiers caches)
        # Attention : si liste trop longue ca peut planter
        # passer par xargs --> man xargs
  #daha: mod limitation *.php
     for fic in `ls |grep .php | xargs` ; do
       if [ $fic != "." -a $fic != ".." ]; then
                base_fic=$(basename -- "$fic")
                #echo "$fic -> $base_fic"
                echo " Analyse de : $base_fic"
                # recursivite
                if [ -d "$base_fic" ]; then
                # Si repertoire, on execute la procedure dessus
                convert_content "$base_fic"
                else
                # sinon on fait la conversion
                do_convert "$base_fic"
                fi
            fi
    done
    echo "Sortie de : $1"
    cd "$chemin_orig"
  else
    echo "Entree INTERDITE dans : $1"
  fi
else
  # On fait la conversion sur le fichier
  do_convert "$1"
fi

}
#=======================================

# Debut execution
if [ $# -gt 0 ]; then
    ### Alerte avant lancement du script
    clear
    echo -e "\n\nATTENTION : ne travaillez jamais sur les donnees d'origine !"
    echo -e "\nEtes-vous certain de vouloir modifier ces fichiers ?"
    echo -e "\tAppuyez sur Ctrl-C pour annuler ou sur Return pour continuer \c"
    read Tempo
    echo
    ### Fin de l'alerte
  # pour l'instant on ne considere que le 1er argument
  echo "Sur: $1"
  echo ""
    ###   On n'est pas a l'abri d'un repertoire avec des espaces dans le nom
  convert_names "$1"
  echo "============="
  # Remarque : si $1 est un repertoire dont le nom a ete converti
  #  le contenu de $1 est obsolete.
  #  on le converti :
  nom=$(echo "$1" | iconv -f $FROM -t $TO)
    convert_content "$nom"
 
  echo "Fini"
else
  echo "Utilisation :"
  echo "$0 chemin/repertoire"
    ### Alerte par precaution
    echo "Ne travaillez jamais sur les donnees d'origine mais seulement sur une copie de celles-ci"
fi
 



Voila, maintenant un petit message pour les visiteurs du futur:"Toi visiteur du futur qui arrive ici via un moteur de recherche car tu as le même problème, ben si tu trouves la cause, laisse un message !!"

Hors ligne

#25 06-02-2014 10:52:31

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : [rustine]pb charset iso-8859-1 / UTF-8 suite passage de Squeeze Wheezy

Ah, super trogloman, merci de ton retour avec les sources et tout, c'est l'top.
Et maintenant, apache2 se met à tout convertir en iso-8859-1 ? tongue

Qui des indiens et des lutins vaincra ?

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

Pied de page des forums