Anmelden

View Full Version : CCSID



svit
01-03-17, 10:58
Hallo *all,
habe wieder ein Problem und brauche eure Hilfe.
Ich habe ein Programm in RPGLE erstellt. Im PGM erstelle ich eine Textdatei. Es funktioniert wunderbar.
Jetzt habe ich das Programm an einen Holländer per DDMF übertragen.
Bei NL funktioniert das Programm nicht mehr weil:
zum Bsp.: "" wird als "Ö" dargestellt, "^" - garnicht.
meine und NL CCSID =65535
meine job ccsid =273
NL job ccsid = 37
Frage: was tun?

Robi
01-03-17, 11:38
Texte auslagern und aus einer PF, PF-Src, Msgf, Dtaara ,... lesen.
Die kann der Holländer selber pflegen
Robi

Fuerchau
01-03-17, 11:53
Alle Texte in deinem Programm unterliegen keiner Codewandlung.
Der Code entspricht der CCSID deiner Quelle, falls zur Compilezeit deine CCSID *HEX ist.

Es ist bestimmt schon seit über 20 Jahren so, dass das Thema CCSID immer noch nicht verstanden wird.

BenderD
01-03-17, 12:25
... Textkonstanten im Programm als Unicode deklarieren und mit %char in normale Alphafelder einstellen.

D*B

svit
01-03-17, 13:35
wenn ich Quellcode mit PDM ansehe sind die sonderzeiche alle umgesetzt.
Jetzt habe ich das Programm (per remote) geändert und alle Zeichen wieder zurückgeändert und es funktioniert.;-0

Fuerchau
01-03-17, 14:06
Das was du siehst ist nicht unbedingt das, was tatsächlich passiert.
Steht der Job auf CCSID 65535 (*HEX) wird deine Quelle in dem Code deines Terminals angezeigt, auch wenn die CCSID der SRC-PF ggf. was anderes sagt.
Der Compiler nimmt deine Quelle und verwendet ebenso die aktuelle CCSID des Jobs, wenn diese *HEX, dann ist der Code entsprechend der CCSID der Quelle, der ja wiederum der Code deiner Sitzung ist.
Zur Laufzeit wird dein Code natürlich nur mit einer PF der passenden CCSID funktionieren.

@Dieter
Das mit der Unicode-Variante funktioniert nur, wenn bei der Erfassung der Textkonstanten die CCSID der SRC-PF zum Text passt. Hast du Src-PF auf 273, Job auf *HEX, und Terminal auf 500 hast du auch in diesem Fall wieder Schrott.
Transportierst du die Quelle auf ein anderes System musst du beachten, dass die Quelle entweder
a) in einer SRC-PF mit gleicher CCSID der Quelle landet
b) eine korrekte Codewandlung durchgeführt wird.
Spätestens wenn du auf dem NL-System dann wieder Umwandelst nimmt der Compiler bei *HEX wieder die System-CCSID an und du hast wieder Schrott in der Konstanten.

Ich sags ja immer wieder: Ein System mit QCCSID = *HEX gehört einfach verboten.

BenderD
01-03-17, 15:30
... die Unicode Const muss ich doch eh in Hex eingeben (u'abcd' , wobei abcd der Hexwert meines Unicode Zeichens ist), das ist erst mal vollkommen invariant gegen alles. Der %char schlägt erst zur Laufzeit zu und da kriege ich das, was mein Job haben will - wo ist da ein Problem?

D*B

Fuerchau
01-03-17, 16:43
Nunja, ich habe schon verzweifelt gesucht, wie ich denn Textkonstanten als Unicode ablegen kann.
Diese als Hexwerte abzulegen ist dann aber doch ein wenig kompliziert.
Eine sinnvolle Compilerunterstützung wäre da schon schön.

BenderD
02-03-17, 07:47
... das würde aber doch wieder dieselben Probleme beim Compile verursachen. Was unter deutscher CCSID funzt, geht mit einer anderen schief - welcher Trottel ist eigentlich ehedem auf die Idee gekommen Zeichen wie # und Co. nicht konsistent zu übersetzen und sich dann noch einen weiteren Trottel zu suchen, der die dann noch in Variablennamen zulässt, oder war das wieder so eine Kantinenwette bei IBM?

D*B

Fuerchau
02-03-17, 08:04
Nun ja, was die Historie so mitbringt:
https://www.heise.de/ct/Redaktion/heb/zeichensaetze.html