PDA

View Full Version : CCSID und STRPCCMD



pwrdwnsys
24-08-07, 14:54
Hallo Leute,

wieder mal eine spannende Frage zum Thema CCSID. (Warum kann ich das Wort eigentlich nicht mehr hören?) Bei Dateien gab es dazu schon reichtlich Stoff zum Lesen, ich habe aber ein Problem mit STRPCCMD. Dazu folgendes:

Ein PC in Deutschland (Deutscher Zeichensatz 1252) greift auf eine AS400 in Schweden zu. Der Job dort läuft korrekt mit CCSID 278, die Datenbank auch. Nun wird aus dem Job mit STRPC / STRPCCMD ein Befehl auf dem PC aufgerufen, der schlägt aber fehl, weil der Zeichensatz einfach nicht stimmt. Die Schwedischen Kollegen vor Ort mit schwedischen PC's haben natürlich kein Problem....Auch die verschiedenen Einstellungen in der API-Definition vom Client Access brachten keinen Erfolg. Was muss ich tun, um den Befehl korrekt abzusetzen ? Das einzige was mir einfällt wäre, den Befehl im AS400 Job zu konvertieren und dann zu uebergen. Gibt es da eine elegantere / einfachere Lösung ?

Danke schon mal für Eure Tips & ein schönes Wochenende.
Karsten

Fuerchau
24-08-07, 15:06
Wie immer: Zwischen Job und PC (DSPF) wird keine Codewandlung (ausser EBCDIC->ASCII) durchgeführt.

Ist der Befehl im CLP hart codiert, wird eben der Hex-Code zum Umwandlungszeitpunkt verwendet.

Am besten ist es, den Befehl auch aus einer Datei zu lesen um die Codewandlung DB->Job zu verwenden.

Am besten eignet sich da z.B. RTVMSG mit Datenvariablen, da auch MSGF's CCSID unterstützen.

Dann klappts auch mit dem STRPCCMD.

Nachsatz:
Der PC, der auf ein Zielsystem direkt zugreift, sollte mit der Ziel-CCSID (Hostcodepage) arbeiten !!!

pwrdwnsys
24-08-07, 15:13
Und wie immer läßt die Antwort nicht lange auf sich warten... Tolles Forum..

Dabei ergibt sich dann die nächste Frage, wie bekomme ich heraus, vor was für einem PC der User sitzt ? Ght das übehaupt? Der AS400 Job weis davon ja nichts. Die Jungs die hier in Germany sitzen möchten ja keinen schwedischen PC. Das ist jetzt zwar nicht das riiiiesen Problem, denn im Zweifelsfall lege ich fuer die User eine Tablelle an. Eine variable Lösung ist aber in jedem Falle besser.

Fuerchau
24-08-07, 15:40
Auch hier gibts mal wieder eine Reihe von API's.
Jedes Device hat eine CHRID (auch die dynamischen) und eine Tastatur-ID (e.g. AGB).
Du musst nur diese Werte per API RTVDEVD abfragen und den Code dann selber in die Ziel EBCDIC-CCSID konvertieren ;).

Ausnahmen sind ggf. die QPADEV-Sitzungen (Passthru, Telnet), deren Tastatur und CHRID aus dem eigenen System generiert werden.

PS:
Das ist aber nicht das einzige Problem !!!
Gibt ein User per Terminal 273 Daten an Job 278 ein, kannst du keine korrekten Umlaute/Sonderzeichen erwarten, da ja nicht umgesetzt wird.

pwrdwnsys
24-08-07, 15:49
Das ist schon klar, trotzdem danke. Allerdings laufen die Jobs ja schon mit CCSID 278, und das Device hat die gleiche ID (278). Das muss ja auch so sein, denn sonst kommt in der Datenbank Schrott an, den der andere im eigenen Land nicht lesen kann. Hatten wir schon alles (*seufz)

Meine momentane Idee ist, mich mit dem PC ueber das QNTC zu verbinden. Die Dateien einer beliebigen Freigabe haben bei deutschen PC's die CCSID 1252, bei anderen Sprachen halt eine andere ID.

Gruß & Danke
Karsten

Fuerchau
24-08-07, 16:16
Tja, dem ist so.
Ggf. hilft da noch UTF-8 (CCSID 1208) für IFS-Dateien.