У меня есть база данных Postgres, закодированная в UTF-8. Я использую Perl со следующими модулями:
use DBI
use XML::Generator::DBI
use XML::SAX::Writer
для извлечения данных из базы данных Postgres в XML-файл с использованием запроса, т. Е .:
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',
);
Это хорошо работает, и в результате я получаю действительный документ XML. Моя проблема в том, что некоторые данные в базе данных являются двоичными, то есть там есть символы, отличные от UTF-8. Когда это происходит, XML :: Generator :: DBI обнаруживает это и выводит данные в файл XML следующим образом:
<foo dbi:encoding='base64'>VGhpcyByZXBvcnQgbGlzdHMgYWxsIGZpbGVzIGhhdmluZyBhY2Nlc3NlcyB0byBkYXRhYmFzZSB0
YWJsZXMuDQpJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOiAgRmlsZSBmdWxs
IG5hbWUsIGFjY2Vzc2VkIHRhYmxl
</foo>
Пространство имен также связано с URL http://axkit.org/NS/xml-generator-dbi. Это правильное поведение в соответствии с документацией к модулю, но я хочу знать следующее: возможно ли каким-то образом преобразовать эту кодированную base64 строку в UTF-8 что я могу на самом деле использовать это?
Я вообще не эксперт по Perl и не Postgres, так что будьте спокойны! большое спасибо.