[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Apr 2016
    Beiträge
    8
    Hallo Fuerchau,
    hallo zusammen,

    hierzu habe ich auch eine Frage: ich bin auf der Suche nach einer richtigen Kodierung zu base64 mittels RPGLE. Das Problem ist, dass die vorhandene Funktion SYSTOOLS.BASE64ENCODE eine VARCHAR mit der max. Länge von VARCHAR(2732) annehmen kann. Ich benötige aber die Konvertierung einer größeren Zeichenkette. Hat jemand Tipps dazu?

    Vielen Dank und viele Grüße,
    Claudia

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.270
    Da hilft nur, selber machen: https://www.scottklement.com/base64/
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Hallo Claudia,

    wenn Dein String größer als 2732 Zeichen ist, dann versuche ihn doch mal zu splitten. Die ersten Blöcke müssen Vielfache von 3-Bytes Länge sein. Der letzte Block ist dann egal. Die Ergebnisse kannst Du dann wieder zusammenfügen. Dann sollte das richtige Ergebnis dabei rauskommen.

    Viele Grüße,
    KM

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.270
    Ja und nein.
    Das Problem ist, dass dann jeder Block auch weider einzeln dekodiert werden muss.
    Am Ende eines MIME64 wird mit 1 oder 2 "=" aufgefüllt damit die Anzahl Zeichen wieder durch 4 teilbar ist. Ich kann das schon verstehen, wenn die Daten als Block an eine andere Anwendung weiter gereicht werden muss, sollte die Kodierung auch vollständig in einem Block erfolgen.
    Also muss man es selber machen und halt Scott's Routinen ggf. auch aufbohren.

    Nachtrag:
    "Die ersten Blöcke müssen Vielfache von 3-Bytes Länge sein" habe ich übersehen, das passt dann ja.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    hier ein Beispiel...

    Encode:
    values(systools.base64encode('DasisteinTes') concat systools.base64encode('tmitBase64Encode'))

    Decode:
    values((systools.base64decode('xIGiiaKjhYmV44Wi')) concat systools.base64decode('o5SJo8KBooX29MWVg5aEhQ=='))

    Beim Decode müssen es natürlich Blöcke mit einer Länge von Vielfachen von 4 Zeichen sein.

    Funktioniert also problemlos.

    Gruß,
    KM

  6. #6
    Registriert seit
    Apr 2016
    Beiträge
    8
    Hallo KM,

    vielen Dank für die hilfreiche Antwort. Das lässt sich mit SQLRPGLE en- und decoden. Jedoch wenn ich die Webseite https://www.base64decode.org/ benutze, klappt das nicht. Haben Sie noch einen Hinweis dazu?

    Viele Grüße
    Claudia

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.270
    Das ist tatsächlich ein Problem.
    Hier spielt die Bitwertigkeit der unterschiedlichen Codepages natürlich eine gewaltige Rolle.
    Mime64 macht aus 3x8-Bit 4x6-Bit. Diese 6 Bits werden über eine Tabelle als Index in die 32 möglichen Zeichen übersetzt. Nun ist aber bei der Aufteilung von EBCDIC '000' = x'F0F0F0' ='111100001111000011110000' eine andere Bitfolge entstanden als bei ASCII '000' = x'303030' = '001100000011000000110000'. Dies führt wegen des anderen Index zu einer anderen Kodierung in Mime und kann daher nicht korrekt auf einem anderen System dekodiert werden.
    Wenn du also das MIME-Format mit der ASCII-Welt austauschen willst, musst du deine Quelldaten vorher in ASCII übersetzten. Dies kannst du am Besten mit der CCSID 1208 (UTF-8) erreichen. Dann bist du auch sprachneutral. Beim Dekodieren musst du dann halt von 1208 wieder in 273 o.ä. umwandeln.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Aug 2014
    Beiträge
    179
    Hallo Forum,

    für das Encode und Decode von BASE64 gibt es API's auf dem System.
    Die sollten bis zu einer Größe von 2GB problemlos funktionieren.
    Wenn bei der Konvertierung mit der Seite https://www.base64decode.org/
    andere Ergebnisse kommen, dann liegt das daran, dass die Seite UTF8 benutzt.

    Damit mit den API's die gleichen Ergebnisse kommen, muss beim Encoding erst
    nach UTF8 konvertiert und dann nach BASE64 codiert werden.

    PHP-Code:
    //------------------------------------------------------------------//
    // BASE64 - Encode String - SRVPGM(QSYSDIR/QAXIS10HT)               //
    //------------------------------------------------------------------//
                                                                          
       
    dcl-pr encbase64bin int(10extproc('apr_base64_encode_binary');   
               
    encoded_p   pointer value;                                 
               
    source_p    pointer value;                                 
               
    sourcelen   int(10value;                                 
       
    end-pr;
                                                                
    //------------------------------------------------------------------//
    // BASE64 - Decode String - SRVPGM(QSYSDIR/QAXIS10HT)               //
    //------------------------------------------------------------------//
                                                                          
       
    dcl-pr decbase64bin int(10extproc('apr_base64_decode_binary');   
               
    decoded_p   pointer value;                                 
               
    encoded_p   pointer value;                                 
       
    end-pr
    Herzliche Grüße

    Rainer

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.270
    UTF8 oder nur ANSI/ASCII ist letztlich egal, halt nur kein EBCDIC.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Apr 2016
    Beiträge
    8
    Hallo Fuerchau,
    hallo zusammen,

    wie kann ich zu utf-8 konvertieren? Reicht es wenn die Quelle in einem Datenbankfeld mit der CCSID 1208 gespeichert ist?
    Vielen Dank für die Hilfe!
    Viele Grüße
    Claudia

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.270
    CCSID 1208 ist UTF-8.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Aug 2014
    Beiträge
    179
    Am besten ich poste ein Beispiel

Similar Threads

  1. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  2. Nochmal CCSID FTP ASCII -> I5
    By oopsy-dear in forum IBM i Hauptforum
    Antworten: 13
    Letzter Beitrag: 11-11-05, 12:55
  3. CCSID Problem aufs Neue
    By b.horstmann in forum NEWSboard Programmierung
    Antworten: 15
    Letzter Beitrag: 12-10-05, 11:26
  4. Problem mit CCSID
    By Ralle in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 25-07-05, 14:58
  5. CCSID Problem
    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
  •