PDA

View Full Version : QDCXLATE verschluckt Zeichen??



KL_RPG
28-09-12, 11:13
Hallo Forum
hier werden über QDCXLATE Daten mit QEBDIC umgesetzt, beim zurücksetzten mit QASCII fehlen Zeichen. Wie z. B.
vorher AÄUÜOÖ nachher A U O
Woran kann das liegen
(CCSID = 273)

Danke für eure AW

Fuerchau
28-09-12, 11:29
QDCXLATE arbeitet mit der angegebenen Tabelle, die kannst du dir mit DSPTBL (oder per WRKBL) ja ansehen.

Wenn du nun QASCII ansiehst, weißt du warum Zeichen nicht korrekt umgesetzt werden.

Besser ist da schon, andere Tabellen zu verwenden, die da kompletter sind (Q273xxxyyyy, Qxxxyyy273) u.v.m.

Anstelle von QDCXLATE gibt es neue API's, die keine Tabellen mehr benötigen da du von/nach CCSID direkt angibst.

KL_RPG
28-09-12, 12:06
Danke erst mal, aber
es ist so, dass die Daten als Ascii hier eintreffen, dann in Ebcdic umgestzt werden und vor dem zurücksenden dann wieder in Ascii umgesetzt werden müssen.
Was könnte ich da für andere Tabellen nehmen?

Fuerchau
28-09-12, 12:26
Dazu eine Frage: wie kommen die Daten ins System?
Wenn die Daten ins IFS gestellt werden, dann bietet sich CPYFRMSTMF oder CPYTOIMPF an. Da gibt man die CCSID der STMF an, von Windows ist das z.B. ANSI 1252.

ASCII definiert nur die Hexcodes x'00' bis X'7F' wobei es dann eben zu den Verlusten kommen kann.
Voll-ASCII ist z.B. CCSID bzw. Codepage 850.
Ich glaube es gibt da z.B. Q273337850 (273 nach 850) und Q850337273 (850 nach 273).

KL_RPG
28-09-12, 12:44
Hallo,
Die Daten kommen über Sockets hier an,
werden dann in eine DTAQ gestellt, das PGM liest diese ein und setzt die Daten dann mit QDCXLATE und QEBCDIC um
nach dem durchlaufen versch. PGM'e werden die Daten dann wieder mit QASCII
umgesetzt und versendet.

Gruß
KL

Fuerchau
28-09-12, 13:44
Dann kann man nur annehmen, dass diese Codepage 850 haben.
Du kannst es mit den oben von mir genannten Q-Tabellen versuchen, die sind eigentlich immer da.

Da du aber schon C-Routinen verwendest kannst du auch die Konvertierungs-API's verwenden:
Character Conversion APIs (http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/apis/nls3.htm?resultof=%22%69%63%6f%6e%76%22%20)

Einfacher gehts auch mit diesem Programm (ähnlich QDCXLATE):
Convert a Graphic Character String (CDRCVRT, QTQCVRT) API (http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/apis/CDRCVRT.htm)

Der Vorteil hier ist, dass keine Tabellen mehr nötig sind.
Du kannst direkt von 850/1252 nach 273 und zurück konvertieren.

KL_RPG
28-09-12, 13:49
Danke
für die schnelle Hilfe, werde die
Vorschläge mal ausprobieren

Gruß
und ein schönes WoEn