[Perl] *** SPAM *** Modules DBI et utf8
dan.leib@orange.fr (imap)
dan.leib at orange.fr
Dim 7 Juin 12:07:40 CEST 2026
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
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://listes.mongueurs.net/archives/perl/attachments/20260607/fd0f1cb5/attachment-0001.html>
Plus d'informations sur la liste de diffusion Perl