Liebe Claudia,
anbei das Beispiel mit BASE64 Decoding. Für die Decodierung des CLOB CCSID 1208
Strings gibt es auch eine pfiffige Lösung. Wenn Du dafür ein Beispiel benötigst, dann
gib mir einfach bescheid.
PHP-Code:
ctl-opt main(main) dftactgrp(*no) bnddir('BASUTL');
//------------------------------------------------------------------//
// //
// Decode BASE64 //
// //
//----------------- //
// R.Ross 04.2017 * //
//------------------------------------------------------------------//
// Prototypen //
//------------------------------------------------------------------//
/include webutl/qcpysrc,iconv // iconv
/include webutl/qcpysrc,base64 // BASE64
//------------------------------------------------------------------//
// Variablen //
//------------------------------------------------------------------//
dcl-s GblString char(1000000); // Text 1 MB
//------------------------------------------------------------------//
// Main //
//------------------------------------------------------------------//
dcl-proc Main;
dcl-s LocString like(GblString);
dcl-s LocBase64 like(GblString);
// Test mit Umlauten äöü
// VGVzdCBtaXQgVW1sYXV0ZW4gw6TDtsO8
LocBase64 = 'VGVzdCBtaXQgVW1sYXV0ZW4gw6TDtsO8';
LocString = decBase64(LocBase64:1141:1208);
end-proc;
//------------------------------------------------------------------//
// Decode Base64 //
//------------------------------------------------------------------//
dcl-proc decBase64;
dcl-pi *n like(GblString) rtnparm; // Decoded String
PiBase64 like(GblString); // Encoded String
PiTrgCcsid uns(10) const; // Target-CCSID
PiSrcCcsid uns(10) const; // Source-CCSID
end-pi;
dcl-s LocString like(GblString) inz; // Result String
dcl-s LocDecStr like(GblString) inz; // Decoded String
dcl-s LocLength int(10); // StringLength
dcl-s LocDeclen int(10); // DecodedLength
LocDeclen = decBase64Bin(%addr(LocDecStr):%addr(PiBase64));
LocLength = %len(%trimr(LocDecStr)); // String-Length
LocString = cvtData(%addr(LocDecStr):LocLength:
PiTrgCcsid:PiSrcCcsid);
LocLength = %len(%trimr(LocString)); // String-Length
if LocDeclen > *zero; // Decoded Length
return %subst(LocString:1:LocDecLen); // Decoded String
else;
return *blanks;
endif;
end-proc;
//------------------------------------------------------------------//
// Convert Data between CCSID's //
//------------------------------------------------------------------//
dcl-proc cvtData;
dcl-pi *n like(GblString) rtnparm; // Result
PiSrc_p pointer const; // Source-Pointer
PiSrcLen uns(10) const; // Source-Length
PiTrgCcsid uns(10) const; // Target-CCSID
PiSrcCcsid uns(10) const; // Source-CCSID
end-pi;
dcl-s LocTarget like(GblString) inz; // Target
dcl-s LocTrg_p pointer inz(%addr(LocTarget));
dcl-s LocTrglen uns(10) inz(%size(LocTarget));
DsSrcCcsid.tq_ccsid = PiSrcCcsid; // Source-CCSID
DsTrgCcsid.tq_ccsid = PiTrgCcsid; // Target-CCSID
DsConv = *allx'00';
DsConv = iconv_open(DsTrgCcsid:DsSrcCcsid); // Open
iconv(DsConv:PiSrc_p:PiSrcLen:LocTrg_p:LocTrglen); // Convert
iconv_close(DsConv); // Close
return %subst(LocTarget:1:%size(LocTarget) - LocTrglen);
end-proc;
//------------------------------------------------------------------//
Herzliche Grüße
Rainer
Bookmarks