[Perl] Modules DBI et utf8
Philippe Delavalade
philippe.delavalade at orange.fr
Dim 14 Juin 11:08:15 CEST 2026
Bonjour Dan et tous.
Désolé d'avoir tant tarder à répondre mais j'ai été absent pendant une
semaine.
J'essaierai la solution mais ça me semble compliqué ; j'envisage même de
passer à Python (je sais c'est presque du sacrilège).
Merci encore.
--
Philippe
Le dimanche 07 juin à 12:07, dan.leib at orange.fr (imap) a écrit :
> Bonjour
>
> Très récemment j’ai eu un souci du même genre : je suis passé de Windows 10
> à Windows 11 et les caractères accentués s’insérer mal dans mysql et même
> dans mon script perl un regexp qui contenait des caractères accentués
> étaient suite à une mauvaise manip transformé en ???
> J’ai ouvert un script créé en ANSI en utf8 et ça a donné cela !
>
> Je me suis servie de chatgpt qui m’a fait faire plusieurs choses :
>
> ·mon regexp : my $regxp_substitute_val =
> '[^\w\s\'\"\\\/,:.\-\+zéèàùâêîôûäëïöüçÉÈÀÙÂÊÎÔÛÄËÏÖÜÇ@]';
> a été transformé en : my $regxp_substitute_val =
> qr/[^0-9A-Za-z_*\s*'"*\\\/*,:.*\-\+\p{Latin}*@*\x{00B0}*]/u; car il ne
> faut pas mettre en dur des caractères non ASCII : ça peut poser problème
> quand on change de système.
>
> ·J’ouvre et lit mon fichier qui contient les lignes à insérer ainsi :
> open(my $in, "<:encoding(UTF-8)", $fichier_entree) or die "Impossible
> d'ouvrir $fichier_entree : $!";
>
> ·Avant les insertions je faisais un : "SET NAMES latin1"
> Maintenant je fais un "SET NAMES utf8mb4 "
>
> ·Dans mon script je sélectionne des résultats d’un table que j’injecte dans
> une autre table et je ne passe pas par un insert into
> DBD::mysql renvoie des octets UTF8 et non des une chaine unicode donc avant
> d’inserer je fais un decode("UTF-8", $ligne{$key}); et je fais un use Encode
> qw(encode decode)
>
> Pour comprendre les soucis chatgpt m’a conseillé de lire https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/
> qui explique bien les différents encodage, l’historique, …
>
> J’ai aussi appris à lire les différentes tables unicode :
>
> ·https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/
>
>
> ·https://www.fileformat.info/info/unicode/utf8.htm
>
> ·https://www.fileformat.info/info/unicode/utf8test.htm
>
> Il y a aussi les docs unicode de perl à lire :
>
> ·Intro : https://perldoc.perl.org/perluniintro
> <https://perldoc.perl.org/perluniintro>
>
> ·Details : https://perldoc.perl.org/perlunicode
> <https://perldoc.perl.org/perlunicode>
>
> ·https://perldoc.perl.org/Encode
>
> ·https://perldoc.perl.org/utf8
>
> Avant ce souci je ne comprenais rien à ces histoires d’encodage et
> d’ailleurs je ne cherchais pas à le faire mais maintenant je comprends
> pourquoi ça fait cela même si je suis encore loin de maitriser.
>
> Chatgpt n’a pas seulement corriger mon souci mais m’à aider à comprendre en
> m’orientant vers les bonnes sources
>
> En espérant vous avoir été utile
>
> Bonne journée
>
> --
> Danièle LEIBOVICI
>
>
> Le 06/06/2026 à 09:50, Philippe Delavalade a écrit :
> > Bonjour.
> >
> > Une question sans doute naïve mais...
> >
> > Je viens de changer de distribution linux et du coup je passe de
> > mariadb 10.5.29 à 12.2.2.
> >
> > Du coup mes scripts perl posent problème au niveau des caractères.
> >
> > Dans l'ancien système j'avais par exemple :
> >
> > my $base = "dbi:mysql:nomdelabase;mysql_enable_utf8=1";
> >
> > maintenant cela produit une erreur au sujet de mysql_enable_utf8=1.
> >
> > Si je modifie ma ligne en
> >
> > my $base = "dbi:MariaDB:nomdelabase";
> >
> > plus d'erreur mais les caractères accentués utf8 ne passent plus.
> >
> > Je ne sais pas s'il faut agir dans perl ou dans mariadb. Sur le web, j'ai
> > trouvé des tas de choses au sujet des "character set" dans mariadb mais
> > rien de vraiment clair et divers essais dans la configuration de mariadb
> > (/etc/my.cnf.d/) n'ont rien donné.
> >
> > Quelqu'un peut-il m'aider ?
> >
> > À tout hasard je mets en pièce jointe un miniscript perl qui produit chez
> > moi le souci en question.
> >
> > Merci d'avance.
> >
> > Cordialement.
> >
> >
> > _______________________________________________
> > Perl mailing list
> > Perl at mongueurs.net
> > http://listes.mongueurs.net/mailman/listinfo/perl
> > Attention, les archives sont publiques
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl
> Attention, les archives sont publiques
Plus d'informations sur la liste de diffusion Perl