ฉันมีฐานข้อมูล 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 สำหรับเรื่องนั้น ง่ายๆ เลย! ขอบคุณมาก.