Bonjour,
J'ai un souci de compréhension avec les sorties de perl.
Voici les données du problème :
Un script perl, encodé en utf-8 avec Notepad++
Ce script va chercher des données dans une base de données MySQL au moyen du module DBI.
Le jeu de caractère pour MySQL est utf-8 unicode. La base de données, ses tables et ses colonnes sont en utf-8 (collation utf8_general_ci).
Les données récupérées sont écrites dans un fichier de sortie .xml avec l'encodage en utf-8 précisé dans le prologue, pareil pour le fichier .xsl qui lui est adjoint.
"<?xml version="1.0" encoding="UTF-8"?>
Il y a des chaînes de caractère récupérées dans MySQL qui ne passent pas dans le fichier .xml, ce qui m'affiche un message d'erreur pour ces caractères accentués lors de l'ouverture du fichier (exemple le ï de maïs).
Quand j'ouvre ce fichier .xml avec Notepad, l'onglet Format me renseigne qu'il est encodé en ANSI. Or il me semblait que les sorties de perl étaient en utf-8?
En consultant différents sujets du forum, j'ai tenté deux solutions :
Première solution au problème :
utilisation du module Encode où j'encode en utf-8 ces chaînes de caractères qui posent problème.
$data[1] = encode("utf-8",$data[1]);
Résultat, le fichier .xml peut-être ouvert sans erreur, mais dans Notepad, il est toujours en ANSI, les caractères accentués s'affichent correctement.
Deuxième solution :
open XML,">>:encoding(utf8)","$path" or die "Erreur ouverture du fichier xml";
Dans ce cas, l'ouverture du fichier .xml ne pose pas de problème et les caractères accentués sont affichés correctement, mais lorsque j'ouvre ce fichier avec Notepad, il est toujours encodé en ANSI et les caractères accentués ne sont pas affichés correctement.
J'ai donc deux questions :
Est-ce qu'il n'y a pas moyen d'avoir un ficher .xml en utf-8 directement sans utiliser le module Encode ?
Pourquoi est-ce que mon fichier .xml est en ANSI avec :encoding(utf-8) ?
Partager