-
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 "№".
-
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.
-
Zitat von Fuerchau
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;
-
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.
-
Zitat von Fuerchau
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.
-
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
-
Zitat von Fuerchau
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!!!!
-
Jo, das war mein Fehler. Mit "bin" meinte ich ja auch int;-).
Aber ansonsten: das Leben kann manchmal so einfach sein.
Similar Threads
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 26-09-17, 09:50
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 21-09-17, 15:36
-
By camouflage in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 25-11-16, 15:41
-
By Dirschl in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 23-10-02, 11:52
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