-
Liebe Claudia,
beim Decode zuerst decBase64Bin aufrufen und dann cvtData von 1208 nach 1141
<code><code>cvtData(%addr(PiString):LocLength:1141:1208); // 1208 -> 1141
</code></code>
Herzliche Grüße
Rainer
-
Ich häng mich mal in dieses Thema an, da die Problematik vermutlich in die gleiche Richtung geht.
Ausgangslage:
Ich muss einen XML String mit XML-Sax verarbeiten. Im IFS steht das File mit CCSID 1252 (Windows). Natürlich knallts bei den Umlauten, klein geschrieben nicht so heftig, aber bei Ä,Ö,Ü erhalt ich eine Exception. Na gut, dann kopier ich das IFS-File auf CCSID 1208 um, aber denkste. Nix hat sich geändert.
Frage nun, komm ich da mit einer iconv Konvertierung weiter?
p.s. ist nicht so, dass ich im Forum nicht gesucht hätte.
kf
-
Wo "knallt" es denn?
Umlaute in den Daten sind unkritisch und lösen keine Fehler aus, Umlaute in den Knoten- und Attributnamen könnten da eher die Ursache sein, da diese sich den RPG-Namen nicht zuordnen lassen.
Hier ist in den XML-Optionen "converts" oder so anzugeben. Dann werden die Zeichen in ungültigen XML-Namen in "_" umgesetzt, die RPG-Namen sind dann analog zu bilden.
-
Hallo Baldur,
Es ist der Feldinhalt, Nodes und Elements die sind aussen vor. Interessanterweise nur bei den "grossen" Umlauten. Ich lese ja das IFS File als String ein. Muss mir das Ganze nochmals genauer anschauen.
kf
-
Wie liest du die Daten aus dem IFS denn ein?
Erfolgt dabei dann tatsächlich eine Umsetzung?
Ggf. verwende einen UCS2-String im Programm (wird von XML-Into wohl unterstützt) und wandle mal mit %UCS2 vorher um. Überprüfe die Hexzeichen mal auf Kompatibilität mit deiner Job-CCSID (ich hoffe du hast eine).
-
Lieber Rainer,
leider habe ich beim Dekodieren noch einen Fehler. Ich versuche einen String (CLOB CCSID 1208) base64 zu dekodieren und das Ergebnis soll als .PDF gespeichert werden. Beim Dekodieren werden jedoch nur Hieroglyphen angezeigt. Ich habe, wie Du oben vorgeschlagen hast, zuerst das decBase64bin und anschließend das cvtData von 1208 auf 1141 aufgerufen, leider alles vergeblich. Könntest Du bitte noch ein Beispiel für das Decode posten?
Vielen Dank!
Viele Grüße
Claudia
-
Da hast du so leider keine Chance.
Wenn der String, den du in 1208 bekommst, bereits base64 codiert ist, dann muss die base64-dekodierung in ASCII erfolgen.
Eine Codewandlung vorher/nachher bringt hier nichts, da die Bitwertigkeit nicht stimmt.
Du benötigst also eine ASCII-Decodierung, anschliessend kannst du das Ergebnis dann nach 1141 umwandeln.
-
Hallo,
eine Dekodierung in ASCII ?
Muss ich dafür eine eigene Prozedur in der API aufrufen, wie etwa ' decbase64bin int(10) extproc('apr_base64_decode_binary')'....?
Oder
muss ich den Eingangsparameter in ASCII umsetzen und mit diesem die angegebene API aufrufen?
Wenn ich das cvtdata von 1208 nach 850 aufrufe, funktioniert das nicht ;-(
Hast du vllt. ein Dekodierbeispiel für mich ?
Vielen Dank vorab
Viele Grüße
Claudia
-
Da musst du dir die Routine von Scott Clement runterladen:
https://www.scottklement.com/base64/
Hier wird eine native codierung/decodierung in EBCDIC durchgeführt.
Diese musst du nun als ASCII-Version erstellen.
Hierzu müssen die Tabellen in ASCII umgewandelt werden bevor die Dekodierung durchgeführt wird und nach der Dekodierung kann die ASCII->EBCDIC-Umwandlung erfolgen.
Alternativ lass dir ein Java-Programm schreiben, dass läuft immer in ASCII/ANSI.
Oder ggf. gibt es irgendwo C-Tools, die sich nach Pase konvertieren lassen.
Oder lass dir ein PC-Programm (.NET) schreiben, dass die Daten per SQL/ODBC liest in Text dekodiert und wieder in die DB schreibt.
Oder, oder, ...
-
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
-
Auf dieser Seite:
https://www.base64encode.org/
Kommt die Kodierung und Dekodierung zum selben Ergebnis.
Also muss das Problem noch woanders liegen.
-
Hallo,
ich sitze an einem ähnlichen Problem. PDF-Datei aus Webservice mit Base64 kodiert. Egal ob ich die Routine von Scott nehme oder die IBM-API, ich bekomme nur einige Zeichen umgesetzt. Es ist als würde es dann abbrechen.
Wenn ich das über www.base64decode.org umwandle klappt das. Ich bekomme direkt das PDF-Dokument zum Download. Schaltet man aber den Live-Mode an, wird angezeigt "Malformed input... ".
Besser geht es über www.base64decode.com. Dort wird das umgewandelt und sieht so aus, als wenn ich die PDF-Datei mit Notepad öffne.
Beispiel:
Der Code beginnt mit:
Code:
JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JTcGFjZVsvSW5kZXhlZC9EZXZpY2VSR0IgMjU1KPPz80hISNra2mFhYcLCwra2tqmpqefn55KSknl5eYWFhVRUVG1tbc7Ozp2dnTw8PP
Lt. www.base64decode.com entspricht das:
Code:
%PDF-1.4
%âãÏÓ
3 0 obj
<</Type/XObject/ColorSpace[/Indexed/DeviceRGB 255(óóóHHHÚÚÚaaa¶¶¶©©©ççç’’’yyy………TTTmmmÎÎÎ<<<ð
Über das RPG-Programm bekomme ich nicht mehr als
Hat jemand eine Idee, wie ich das lösen kann oder benötige ich die "pfiffige Lösung" von Rainer?
Danke schon mal.
Similar Threads
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By oopsy-dear in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 11-11-05, 12:55
-
By b.horstmann in forum NEWSboard Programmierung
Antworten: 15
Letzter Beitrag: 12-10-05, 11:26
-
By Ralle in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 25-07-05, 14:58
-
By Arbi in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 13-10-01, 11:59
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks