Zitat Zitat von BenderD Beitrag anzeigen
... ich denke mal, der Compiler hat bei Unicode auch Probleme mit Knast (#) und Co (andere invariante Zeichen im EBCDIC). Für mich ist das alles letztlich nicht zu Ende gedachter Murks.
D*B
Der Compiler verarbeitet per Default die Quelle in der CCSID der Quelle.
Über den Parameter TGTCCSID in den Compile Commands kann eine andere CCSID (z.B. *JOB oder numerischer Wert) angegeben werden. Bei einer von der Quelle abweichenden CCSID wird zunächst die Quelle in die entsprechende CCSID konvertiert und anschließend compiliert.

Schlimmer ist, was zur Laufzeit passiert. Zur Laufzeit werden per Default alle CHAR/VARCHAR Variablen und Spalten in Tabellen/phys./log.Dateien (für native I/O) oder externen Datenstrukturen in die Job-CCSID konvertiert. Zeichen, die nicht umgesetzt werden können, werden durch ein Substitutions-Zeichen x'FE' ersetzt, wodurch Daten verloren gehen können. Das gleiche geschieht i.Ü. auch mit hardcodierten Sonderzeichen. Deshalb sollte man soweit möglich Sonderzeichen in Quellen vermeiden. Nur manchmal sind Sonderzeichen doch notwendig z.B. wenn Regular Expressions verwendet werden müssen ... und dann kann man sich ganz schön wundern. Spätestenfalls wenn das (Service-)Programm in einer Umgebung mit einer anderen CCSID laufen muss.
... dem kann man natürlich gegensteuern, durch entsprechende Schlüssel-Worte in den H- und D-Bestimmungen.