J'ai une base de données Postgres codée en UTF-8. J'utilise Perl avec les modules suivants:Extraction de données de la base de données Postgres vers XML via le problème de codage Perl
use DBI
use XML::Generator::DBI
use XML::SAX::Writer
pour extraire des données dans la base de données Postgres vers un fichier XML à l'aide d'une requête, à savoir:
use DBI;
use XML::Generator::DBI;
use XML::SAX::Writer;
my $dbh = DBI->connect("dbi:Pg:dbname=postgres;host=MYHOST;port=2278",
username,
password,
{RaiseError => 1},
);
my $handler = XML::SAX::Writer->new(Output => 'foo.xml');
my $generator = XML::Generator::DBI->new(
Handler => $handler,
dbh => $dbh,
Indent => 1,
);
$select = qq(
!!!!SQL QUERY!!!!!
);
$generator->execute(
$select,
undef,
RootElement => 'root',
);
Cela fonctionne bien et je reçois un document XML valide Par conséquent. Mon problème est que certaines données de la base de données sont binaires, c'est-à-dire qu'il y a des caractères non UTF-8. Lorsque cela se produit, XML :: Générateur :: DBI détecte et transmet les données comme suit dans le fichier XML:
<foo dbi:encoding='base64'>VGhpcyByZXBvcnQgbGlzdHMgYWxsIGZpbGVzIGhhdmluZyBhY2Nlc3NlcyB0byBkYXRhYmFzZSB0
YWJsZXMuDQpJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOiAgRmlsZSBmdWxs
IG5hbWUsIGFjY2Vzc2VkIHRhYmxl
</foo>
L'espace de noms est également lié à l'URL http://axkit.org/NS/xml-generator-dbi. C'est un comportement correct selon la documentation du module, mais ce que je veux savoir c'est: est-il possible de transformer en quelque sorte cette chaîne codée en base64 en UTF-8 pour que je puisse l'utiliser?
Je ne suis pas du tout un expert Perl, pas plus que Postgres, alors allez-y doucement! Merci beaucoup.
Merci pour votre réponse. Je ne savais pas sur le module - merci (je ne sais pas comment faire pour l'intégrer mais je vais y jeter un coup d'oeil). Les données qui sortent en tant que base64 sont généralement des exemples de code, par exemple Java, des exemples de codage C++ qui ont été stockés dans une table - mais pas nécessairement. Pour l'exemple de ma question, ceci se traduit par: Ce rapport liste tous les fichiers ayant accès aux tables de la base de données. Il fournit les informations suivantes: Nom complet du fichier, table accédée "- donc je suppose que cela doit être le: qui provoque la sortie base64? – JamesH
Juste expansion sur ce que les données sont réellement.L'exemple que j'ai fourni dans ma question est réellement stocké comme ceci dans la base de données Postgres: "Ce rapport liste tous les fichiers ayant accès aux tables de base de données. Il fournit les informations suivantes: Nom complet du fichier, table accédée " Je pense qu'il y a un retour chariot après le premier arrêt complet Dans cet exemple, cela doit être pourquoi" base64 "est utilisé comme": "est un UTF -8 caractères autorisés et ne devrait pas provoquer l'utilisation de base64 ... – JamesH
En outre ... J'ai recherché le script qui crée ces données, voici ce qui contient: Ce rapport liste tous les fichiers ayant accès aux tables de base de données. xD! ''! xA!'Il fournit les informations suivantes: Nom complet du fichier, table accédée – JamesH