j'ai écris un petit script perl pour décoder l'encodage de fichiers html
avec Encode:: Guess
mais perl couine :
Can't locate object method "name" via package "iso-8859-1 or utf8"
(perhaps you forgot to load "iso-8859-1 or utf8"?) at
/Users/yvon/work/Perl/encoding-check/check_files.pl line 24.
voici ce qu'il y a dans use :
use Encode::Encoding;
use Encode::Guess;
#use Encode::iso-8859-1;
use utf8;
#use iso-8859-1; # ne trouve pas iso.pm
use base qw(Encode::Encoding);
ma version de perl est v5.8.8
pourtant, quand je liste les encodages par défaut j'ai :
Default :
ascii
ascii-ctrl
iso-8859-1
null
UCS-2BE
UCS-2LE
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
utf-8-strict
utf8
je ne vois pas comment obtenir iso-8859-1 ni ne comprends le message
d'erreur...
d'autant plus que utf-8 semble bien chargé par le use utf8...
mon script complet :
#!/usr/bin/perl
use Encode::Encoding;
use Encode::Guess;
#use Encode::iso-8859-1;
use utf8;
#use iso-8859-1;
use base qw(Encode::Encoding);
#use latin1;
#use Unicode;
sub guessEncoding
{
my ($fn) = @_;
my $string;
{
local $/;
open F, $fn or die "can't open $file: $!";
$string = <F>;
close F or die "cannot close $file: $!";
}
Encode::Guess->add_suspects('latin1');
my $decoder = Encode::Guess->guess($string);
return $decoder->name;
}
Une bévue wrote in message <1hcwm6w.10qp3ade6ixirN%:
pourtant, quand je liste les encodages par défaut j'ai : ...
iso-8859-1 ...
je ne vois pas comment obtenir iso-8859-1
Euh, tu l'as déjà. Pour les encodages plus exotiques, cf la doc de Encode::Supported, qui n'est pas un package mais indique les noms des packages à inclure pour telle ou telle famille d'encodages.
d'autant plus que utf-8 semble bien chargé par le use utf8...
Non, rien à voir. use utf8 dit seulement que l'encodage du fichier contenant le source du script est UTF-8.
Une bévue wrote in message
<1hcwm6w.10qp3ade6ixirN%pere.noel@laponie.com.invalid>:
pourtant, quand je liste les encodages par défaut j'ai :
...
iso-8859-1
...
je ne vois pas comment obtenir iso-8859-1
Euh, tu l'as déjà. Pour les encodages plus exotiques, cf la doc de
Encode::Supported, qui n'est pas un package mais indique les noms des
packages à inclure pour telle ou telle famille d'encodages.
d'autant plus que utf-8 semble bien chargé par le use utf8...
Non, rien à voir. use utf8 dit seulement que l'encodage du fichier contenant
le source du script est UTF-8.
Une bévue wrote in message <1hcwm6w.10qp3ade6ixirN%:
pourtant, quand je liste les encodages par défaut j'ai : ...
iso-8859-1 ...
je ne vois pas comment obtenir iso-8859-1
Euh, tu l'as déjà. Pour les encodages plus exotiques, cf la doc de Encode::Supported, qui n'est pas un package mais indique les noms des packages à inclure pour telle ou telle famille d'encodages.
d'autant plus que utf-8 semble bien chargé par le use utf8...
Non, rien à voir. use utf8 dit seulement que l'encodage du fichier contenant le source du script est UTF-8.
pere.noel
Nicolas George <nicolas$ wrote:
Euh, tu l'as déjà.
c'est vrai, je me gourate...
Pour les encodages plus exotiques, cf la doc de Encode::Supported, qui n'est pas un package mais indique les noms des packages à inclure pour telle ou telle famille d'encodages.
d'autant plus que utf-8 semble bien chargé par le use utf8...
Non, rien à voir. use utf8 dit seulement que l'encodage du fichier contenant le source du script est UTF-8.
ah d'accord, mais alors comment charger l'utf-8 ?
car si je met : Encode::Guess->add_suspects('latin1', 'utf8');
ça me retourne : iso-8859-1 or utf8 at /Users/yvon/work/Perl/encoding-check/check_files.pl line 25.
pour le premier fichier encodé en UTF-8, et comme dans ce fichier (qui est la table de CP-1252) il y a des é è etc... je ne vois pas comment perl peut hésiter ?
par ailleurs si je print les encodages par défaut par :
j'obtiens la liste : Default : ascii ascii-ctrl iso-8859-1 null UCS-2BE UCS-2LE UTF-16 UTF-16BE UTF-16LE UTF-32 UTF-32BE UTF-32LE utf-8-strict utf8
comment charger les encodages correspondants ???
-- une bévue
Nicolas George <nicolas$george@salle-s.org> wrote:
Euh, tu l'as déjà.
c'est vrai, je me gourate...
Pour les encodages plus exotiques, cf la doc de
Encode::Supported, qui n'est pas un package mais indique les noms des
packages à inclure pour telle ou telle famille d'encodages.
d'autant plus que utf-8 semble bien chargé par le use utf8...
Non, rien à voir. use utf8 dit seulement que l'encodage du fichier contenant
le source du script est UTF-8.
ah d'accord, mais alors comment charger l'utf-8 ?
car si je met :
Encode::Guess->add_suspects('latin1', 'utf8');
ça me retourne :
iso-8859-1 or utf8 at
/Users/yvon/work/Perl/encoding-check/check_files.pl line 25.
pour le premier fichier encodé en UTF-8, et comme dans ce fichier (qui
est la table de CP-1252) il y a des é è etc... je ne vois pas comment
perl peut hésiter ?
par ailleurs si je print les encodages par défaut par :
Pour les encodages plus exotiques, cf la doc de Encode::Supported, qui n'est pas un package mais indique les noms des packages à inclure pour telle ou telle famille d'encodages.
d'autant plus que utf-8 semble bien chargé par le use utf8...
Non, rien à voir. use utf8 dit seulement que l'encodage du fichier contenant le source du script est UTF-8.
ah d'accord, mais alors comment charger l'utf-8 ?
car si je met : Encode::Guess->add_suspects('latin1', 'utf8');
ça me retourne : iso-8859-1 or utf8 at /Users/yvon/work/Perl/encoding-check/check_files.pl line 25.
pour le premier fichier encodé en UTF-8, et comme dans ce fichier (qui est la table de CP-1252) il y a des é è etc... je ne vois pas comment perl peut hésiter ?
par ailleurs si je print les encodages par défaut par :
j'obtiens la liste : Default : ascii ascii-ctrl iso-8859-1 null UCS-2BE UCS-2LE UTF-16 UTF-16BE UTF-16LE UTF-32 UTF-32BE UTF-32LE utf-8-strict utf8
comment charger les encodages correspondants ???
-- une bévue
Nicolas George
Une bévue wrote in message <1hcx1ya.1jtnxx7pmzx8iN%:
ah d'accord, mais alors comment charger l'utf-8 ?
Il est aussi déjà chargé, regarde ta liste.
pour le premier fichier encodé en UTF-8, et comme dans ce fichier (qui est la table de CP-1252) il y a des é è etc... je ne vois pas comment perl peut hésiter ?
Essaie avec utf-8-strict.
comment charger les encodages correspondants ???
Ils sont déjà chargés, s'ils sont dans la liste. C'est précisément à ça que sert la liste.
Une bévue wrote in message
<1hcx1ya.1jtnxx7pmzx8iN%pere.noel@laponie.com.invalid>:
ah d'accord, mais alors comment charger l'utf-8 ?
Il est aussi déjà chargé, regarde ta liste.
pour le premier fichier encodé en UTF-8, et comme dans ce fichier (qui
est la table de CP-1252) il y a des é è etc... je ne vois pas comment
perl peut hésiter ?
Essaie avec utf-8-strict.
comment charger les encodages correspondants ???
Ils sont déjà chargés, s'ils sont dans la liste. C'est précisément à ça que
sert la liste.
Une bévue wrote in message <1hcx1ya.1jtnxx7pmzx8iN%:
ah d'accord, mais alors comment charger l'utf-8 ?
Il est aussi déjà chargé, regarde ta liste.
pour le premier fichier encodé en UTF-8, et comme dans ce fichier (qui est la table de CP-1252) il y a des é è etc... je ne vois pas comment perl peut hésiter ?
Essaie avec utf-8-strict.
comment charger les encodages correspondants ???
Ils sont déjà chargés, s'ils sont dans la liste. C'est précisément à ça que sert la liste.
pere.noel
Nicolas George <nicolas$ wrote:
Essaie avec utf-8-strict.
résultat : utf-8-strict or iso-8859-1 or utf8 at /Users/yvon/work/Perl/encoding-check/check_files.pl line 25.
donc, je fais moins bien avec Perl qu'avec ma méthode...
-- une bévue
Nicolas George <nicolas$george@salle-s.org> wrote:
Essaie avec utf-8-strict.
résultat :
utf-8-strict or iso-8859-1 or utf8 at
/Users/yvon/work/Perl/encoding-check/check_files.pl line 25.
donc, je fais moins bien avec Perl qu'avec ma méthode...
Une bévue wrote in message <1hcyajp.h8t5bs1kx7v8vN%:
ben oui, pas de raison, c'est un mélange de fichiers de provenaces diverses tout est là, pelle-melle : <http://thoraval.yvon.free.fr/encoding-check-new/>
les noms de fichiers se terminent par leur encodage.
En fait, si tu regardes bien, tu vois que ce sont les fichiers en UTF-8 sur lesquels la détection échoue. Ce qui est normal, puisque n'importe quel fichier est un fichier valide en ISO-8859-1 (les codes 0x80-0x9F sont des codes de contrôle, mais font partie du jeu de plein droit).
Une bévue wrote in message
<1hcyajp.h8t5bs1kx7v8vN%pere.noel@laponie.com.invalid>:
ben oui, pas de raison, c'est un mélange de fichiers de provenaces
diverses tout est là, pelle-melle :
<http://thoraval.yvon.free.fr/encoding-check-new/>
les noms de fichiers se terminent par leur encodage.
En fait, si tu regardes bien, tu vois que ce sont les fichiers en UTF-8 sur
lesquels la détection échoue. Ce qui est normal, puisque n'importe quel
fichier est un fichier valide en ISO-8859-1 (les codes 0x80-0x9F sont des
codes de contrôle, mais font partie du jeu de plein droit).
Une bévue wrote in message <1hcyajp.h8t5bs1kx7v8vN%:
ben oui, pas de raison, c'est un mélange de fichiers de provenaces diverses tout est là, pelle-melle : <http://thoraval.yvon.free.fr/encoding-check-new/>
les noms de fichiers se terminent par leur encodage.
En fait, si tu regardes bien, tu vois que ce sont les fichiers en UTF-8 sur lesquels la détection échoue. Ce qui est normal, puisque n'importe quel fichier est un fichier valide en ISO-8859-1 (les codes 0x80-0x9F sont des codes de contrôle, mais font partie du jeu de plein droit).
pere.noel
Nicolas George <nicolas$ wrote:
En fait, si tu regardes bien, tu vois que ce sont les fichiers en UTF-8 sur lesquels la détection échoue. Ce qui est normal, puisque n'importe quel fichier est un fichier valide en ISO-8859-1 (les codes 0x80-0x9F sont des codes de contrôle, mais font partie du jeu de plein droit).
non, je ne trouve pas ça normal *** du tout *** si on guess ascii et UTF-8 d'abord, et qu'on trouve l'un des deux encodages, on a pas à revenir dessus (ascii < 127, utf-! codé sur plus d'un octet), c'est le truc perl qui est mal conçu, on mal utilisé par moi, en fait avec mon prog ruby, je teste d'abord ascii et utf-8 tout le reste je le met en ISO-8859-1 et puis je re-mouline pour affiner.
alors peut-être qu'avec perl il y a cette même possibilité "guesser" d'abord uniquement ascii et utf-8 puis après seulement le reste... sur les fichiers qui ne sont ni l'un ni l'autre.
pour moi ré-essayer avec perl il faut que je sois sur que ça m'apporte qqc notamment du côté des encodages +/- exotiques cp-1252; iso-8859-2 etc...
le pb est que je ne veux pas que l'utilisateur final ait à installer qqc d'autre que mon appli par glissé-déposé. -- une bévue
Nicolas George <nicolas$george@salle-s.org> wrote:
En fait, si tu regardes bien, tu vois que ce sont les fichiers en UTF-8 sur
lesquels la détection échoue. Ce qui est normal, puisque n'importe quel
fichier est un fichier valide en ISO-8859-1 (les codes 0x80-0x9F sont des
codes de contrôle, mais font partie du jeu de plein droit).
non, je ne trouve pas ça normal *** du tout *** si on guess ascii et
UTF-8 d'abord, et qu'on trouve l'un des deux encodages, on a pas à
revenir dessus (ascii < 127, utf-! codé sur plus d'un octet), c'est le
truc perl qui est mal conçu, on mal utilisé par moi, en fait avec mon
prog ruby, je teste d'abord ascii et utf-8 tout le reste je le met en
ISO-8859-1 et puis je re-mouline pour affiner.
alors peut-être qu'avec perl il y a cette même possibilité "guesser"
d'abord uniquement ascii et utf-8 puis après seulement le reste... sur
les fichiers qui ne sont ni l'un ni l'autre.
pour moi ré-essayer avec perl il faut que je sois sur que ça m'apporte
qqc notamment du côté des encodages +/- exotiques cp-1252; iso-8859-2
etc...
le pb est que je ne veux pas que l'utilisateur final ait à installer qqc
d'autre que mon appli par glissé-déposé.
--
une bévue
En fait, si tu regardes bien, tu vois que ce sont les fichiers en UTF-8 sur lesquels la détection échoue. Ce qui est normal, puisque n'importe quel fichier est un fichier valide en ISO-8859-1 (les codes 0x80-0x9F sont des codes de contrôle, mais font partie du jeu de plein droit).
non, je ne trouve pas ça normal *** du tout *** si on guess ascii et UTF-8 d'abord, et qu'on trouve l'un des deux encodages, on a pas à revenir dessus (ascii < 127, utf-! codé sur plus d'un octet), c'est le truc perl qui est mal conçu, on mal utilisé par moi, en fait avec mon prog ruby, je teste d'abord ascii et utf-8 tout le reste je le met en ISO-8859-1 et puis je re-mouline pour affiner.
alors peut-être qu'avec perl il y a cette même possibilité "guesser" d'abord uniquement ascii et utf-8 puis après seulement le reste... sur les fichiers qui ne sont ni l'un ni l'autre.
pour moi ré-essayer avec perl il faut que je sois sur que ça m'apporte qqc notamment du côté des encodages +/- exotiques cp-1252; iso-8859-2 etc...
le pb est que je ne veux pas que l'utilisateur final ait à installer qqc d'autre que mon appli par glissé-déposé. -- une bévue
Paul Gaborit
À (at) Wed, 29 Mar 2006 15:24:38 +0200, (Une bévue) écrivait (wrote):
non, je ne trouve pas ça normal *** du tout *** si on guess ascii et UTF-8 d'abord, et qu'on trouve l'un des deux encodages, on a pas à revenir dessus (ascii < 127, utf-! codé sur plus d'un octet), c'est le truc perl qui est mal conçu, on mal utilisé par moi, en fait avec mon prog ruby, je teste d'abord ascii et utf-8 tout le reste je le met en ISO-8859-1 et puis je re-mouline pour affiner.
alors peut-être qu'avec perl il y a cette même possibilité "guesser" d'abord uniquement ascii et utf-8 puis après seulement le reste... sur les fichiers qui ne sont ni l'un ni l'autre.
Voici une version modifiée que fait peut-être ce que vous souhaitez :
------------------------------------------------------------ sub guessEncoding { my ($fn) = @_; my $string; { local $/; open F, $fn or die "can't open $fn: $!"; $string = <F>; close F or die "cannot close $fn: $!"; } Encode::Guess->set_suspects(qw/ascii utf8/); my $decoder = Encode::Guess->guess($string); if (ref $decoder) { return $decoder->name; } else { Encode::Guess->set_suspects(qw/latin-1/); my $decoder = Encode::Guess->guess($string); if (ref $decoder) { return $decoder->name; } else { die "$fn : $decodern"; } } } ------------------------------------------------------------
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Wed, 29 Mar 2006 15:24:38 +0200,
pere.noel@laponie.com.invalid (Une bévue) écrivait (wrote):
non, je ne trouve pas ça normal *** du tout *** si on guess ascii et
UTF-8 d'abord, et qu'on trouve l'un des deux encodages, on a pas à
revenir dessus (ascii < 127, utf-! codé sur plus d'un octet), c'est le
truc perl qui est mal conçu, on mal utilisé par moi, en fait avec mon
prog ruby, je teste d'abord ascii et utf-8 tout le reste je le met en
ISO-8859-1 et puis je re-mouline pour affiner.
alors peut-être qu'avec perl il y a cette même possibilité "guesser"
d'abord uniquement ascii et utf-8 puis après seulement le reste... sur
les fichiers qui ne sont ni l'un ni l'autre.
Voici une version modifiée que fait peut-être ce que vous souhaitez :
------------------------------------------------------------
sub guessEncoding {
my ($fn) = @_;
my $string;
{
local $/;
open F, $fn or die "can't open $fn: $!";
$string = <F>;
close F or die "cannot close $fn: $!";
}
Encode::Guess->set_suspects(qw/ascii utf8/);
my $decoder = Encode::Guess->guess($string);
if (ref $decoder) {
return $decoder->name;
} else {
Encode::Guess->set_suspects(qw/latin-1/);
my $decoder = Encode::Guess->guess($string);
if (ref $decoder) {
return $decoder->name;
} else {
die "$fn : $decodern";
}
}
}
------------------------------------------------------------
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Wed, 29 Mar 2006 15:24:38 +0200, (Une bévue) écrivait (wrote):
non, je ne trouve pas ça normal *** du tout *** si on guess ascii et UTF-8 d'abord, et qu'on trouve l'un des deux encodages, on a pas à revenir dessus (ascii < 127, utf-! codé sur plus d'un octet), c'est le truc perl qui est mal conçu, on mal utilisé par moi, en fait avec mon prog ruby, je teste d'abord ascii et utf-8 tout le reste je le met en ISO-8859-1 et puis je re-mouline pour affiner.
alors peut-être qu'avec perl il y a cette même possibilité "guesser" d'abord uniquement ascii et utf-8 puis après seulement le reste... sur les fichiers qui ne sont ni l'un ni l'autre.
Voici une version modifiée que fait peut-être ce que vous souhaitez :
------------------------------------------------------------ sub guessEncoding { my ($fn) = @_; my $string; { local $/; open F, $fn or die "can't open $fn: $!"; $string = <F>; close F or die "cannot close $fn: $!"; } Encode::Guess->set_suspects(qw/ascii utf8/); my $decoder = Encode::Guess->guess($string); if (ref $decoder) { return $decoder->name; } else { Encode::Guess->set_suspects(qw/latin-1/); my $decoder = Encode::Guess->guess($string); if (ref $decoder) { return $decoder->name; } else { die "$fn : $decodern"; } } } ------------------------------------------------------------
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>