Saya memiliki database Postgres yang dikodekan dalam UTF-8. Saya menggunakan Perl dengan modul berikut:
use DBI
use XML::Generator::DBI
use XML::SAX::Writer
untuk mengekstrak data dalam database Postgres ke file XML menggunakan query, yaitu:
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',
);
Ini berfungsi dengan baik dan saya mendapatkan dokumen XML yang valid sebagai hasilnya. Masalah saya adalah beberapa data dalam database adalah biner - yaitu ada karakter non UTF-8 di sana. Ketika ini terjadi, XML::Generator::DBI mendeteksi ini dan mengeluarkan data sebagai berikut dalam file XML:
<foo dbi:encoding='base64'>VGhpcyByZXBvcnQgbGlzdHMgYWxsIGZpbGVzIGhhdmluZyBhY2Nlc3NlcyB0byBkYXRhYmFzZSB0
YWJsZXMuDQpJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOiAgRmlsZSBmdWxs
IG5hbWUsIGFjY2Vzc2VkIHRhYmxl
</foo>
Namespace juga terikat pada URL http://axkit.org/NS/xml-generator-dbi. Ini adalah perilaku yang benar menurut dokumentasi modul, tetapi yang ingin saya ketahui adalah: apakah mungkin mengubah string yang disandikan base64 ini menjadi UTF-8 sehingga saya benar-benar dapat menggunakannya?
Saya sama sekali bukan ahli Perl, atau Postgres, jadi santai saja! terimakasih banyak.