[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