[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2015
    Beiträge
    18

    Codepoint UCS2 -> 1141

    Hallo!


    Mein Problem ist folgendes:
    In userem Intranet gibt es ein Soap-Service, das mir einen dezimalen UCS2-Codepoint (z.B. 8470) liefert und dazu das Zeichen, das ich stattdessen in unserer CCSID 1141-Welt darstellen soll.

    Also es kommt via Webservice rein:
    {"codepoint": 8470, "displaychar": "No"}

    Ist es möglich via ILERPG oder API's festzustellen, um welches Zeichen es sich hinter dem dezimalen Codepoint handelt?
    Zur Info: UCS2-Codepoint 8470 entspricht dem Zeichen "№".

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    17.917
    Dies geht simplerweise mit UCS2 und Overlay:

    dcl-ds UCSConverter;
    UCSChar ucs2(1) pos(1);
    UCSDec bin(5) pos(1);
    CharChar char(1) ccsid(1141);
    end-ds;

    UCSDec = %dec(Codepoint:5:0);
    CharChar = UCSChar;

    // Bei fehlerhafter Umwandlung wird "?" eingesetzt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Sep 2015
    Beiträge
    18
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Dies geht simplerweise mit UCS2 und Overlay:

    .....
    Interessanter Ansatz, musste Dein Snippet etwas abwandeln, funkt aber leider nicht wirklich. Mein Beispiel ist mit Codepoint 34, das ist das Zeichen ", d.h. es müsste auch mit 1141 darstellbar sein - via Debugg ist in der Variable $charchar nix lesbares.

    dcl-ds UCSConverter;
    UCSChar ucs2(1) pos(1);
    UCSDec bindec(5) pos(1);
    end-ds;
    dcl-s $CharChar char(1) ccsid(1141);
    dcl-s $Codepoint char(5);

    $CodePoint = '34';
    UCSDec = %dec($Codepoint:5:0);
    $charChar = UCSChar;

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    17.917
    Schau dir die Inhalte im Debugger mit "eval ucsconverter:x" an. Es sollte x'0022' drinstehen.
    Dies sollte entsprechend umgewandelt werden.
    Nun habe ich nicht ausprobiert ob die Codewandlung UCS2->1141 korrekt funktioniert, wenn die JOB-CCSID uad *HEX steht.
    Des weiteren muss in "dcl-ctl UCS2(1200);" o.ä. stehen.
    Aber das kann ich gerne morgen mal prüfen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Sep 2015
    Beiträge
    18

    Smile

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Schau dir die Inhalte im Debugger mi...
    Hi!

    Hatte ich auch schon gedacht, sieht nun bei mir so aus:

    CTL-OPT DftActGrp(*No) ActGrp(*NEW)
    BndDir('YBNDDIR')
    CCSID(*CHAR: 1141)
    CCSID(*UCS2: 1200)
    DecEdit('0.');

    dcl-ds UCSConverter;
    UCSChar ucs2(1) pos(1);
    UCSDec bindec(5) pos(1);
    end-ds;
    dcl-s $CharChar char(1);
    dcl-s $Codepoint char(5);

    $CodePoint = '34';
    UCSDec = %dec($Codepoint:5:0);
    $charChar = UCSChar;

    Inhalt von UCSConverter mit :x ist x'22' - scheint zu funktionieren .
    Der inhalt von UCSCHAR ist aber undefiniert und daher kommt auch in $charChar undefiniertes.
    Funkt auch nicht, wenn ich $charchar mit CCSID(1208) definiere.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    17.917
    bindec ist ja auch die falsche Definition!
    int(5) bzw. besser noch uint(5) => 2 Bytes mit +/- 32767 oder 0-65535.
    bindec(5) => 5 signifikante Ziffern, also +/- 99999
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Sep 2015
    Beiträge
    18
    Zitat Zitat von Fuerchau Beitrag anzeigen
    bindec ist...
    bin(5) hatte ich von dir weiter oben vom ersten Ansatz übernommen, da dies nicht kompiliert wurde, hatte ich bindec(5) eingesetzt.

    Funkt jetzt einwandfrei, die Lösung ist:

    dcl-ds UCSConverter;
    UCSChar ucs2(1) pos(1);
    UCSDec uns(5) pos(1);
    end-ds;

    Besten Dank für die Hilfe!!!!

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    17.917
    Jo, das war mein Fehler. Mit "bin" meinte ich ja auch int;-).
    Aber ansonsten: das Leben kann manchmal so einfach sein.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

Ähnliche Themen

  1. UCS2 oder graph?
    Von dschroeder im Forum NEWSboard programmierung
    Antworten: 5
    Letzter Beitrag: 26-09-17, 10:50
  2. Hex-Konstante und UCS2
    Von dschroeder im Forum NEWSboard programmierung
    Antworten: 8
    Letzter Beitrag: 21-09-17, 16:36
  3. FTP Unicode nach UTF8 Windows
    Von camouflage im Forum NEWSboard programmierung
    Antworten: 6
    Letzter Beitrag: 25-11-16, 16:41
  4. Ausgabe UTF8
    Von Dirschl im Forum System i Hauptforum
    Antworten: 0
    Letzter Beitrag: 23-10-02, 12:52

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •