Das Feld DATEIFELD ist in der Physischen mit 30A CCSID(1208 *NORMALIZE) definiert. Das Feld MASKENFELD ist in der Maske mit 15G CCSID(13488 *LEN 30).
Nachdem ich einen Satz in der Physischen gelesen habe weise ich dem Maksenfeld den Wert mit EVAL MASKENFELD = %UCS2(DATEIFELD) zu. Nachdem der Wert in der Maske geändert wurde wird dem Dateifeld der Wert mit der Anweisung EVAL DATEIFELD = %CHAR(%TRIM(MAKSKENFELD)) zugewiesen.
Rufe ich das Programm in einer DBCS Umgebung auf und schreibe DBCS-Zeichen in das Maskenfeld klappt das wegschreiben. Wenn ich unter einer deutschen Anmeldung ein Ä,Ö,Ü,§,²,³ od. ´wegschreiben will stürzt das Programm mit dem bereits erwähnten Fehler ab (in der DBCS-Umgebung kann ich die Zeichen gar nicht eingeben).

Ich habe auch das Maskenfeld mal auf 30A geändert und die Zuweisungen durch EVAL MASKENFELD = DATEIFELD und EVAL DATEIFELD = MASKENFELD ersetzt. Das Ergebnis war dasselbe. Die anderen Zeichen auf der Tastatur konnte er ohne Probleme wegschreiben, nur bei diesen hat er Probleme.

Hab auch gerade nochmal bei Unicode.org vorbeigeschaut. Die ganzen Zeichen mit denen es nicht funktioniert scheinen nicht im normalen ASCII-Zeichensatz zu sein und werden wohl daher beim wegschreiben umgesetzt auf einen 2-Byte Wert. Wahrscheinlich müsste man die Zeichen schon vorher nach UTF-8 konvertieren aber ausser der API QlgTransformUCSData() hab ich noch nichts dazu gefunden. Kann auch in der RPG-Source kein Feld mit CCSID(1208) definieren.

Ne Idee wie man das noch elegant lösen könnte? Ansonsten muss ich es mal mit der API probieren, auch wenn ich im Moment noch nicht genau weiss wie ich die im RPG verwenden muss.

JobCCSID unter der deutschen Anmeldung ist 273. Das ganze funktioniert auch wenn ich statt UTF-8 UTF-16 od. UCS2 in meiner Physischen verwende, mich hätte aber eben gerade UTF-8 interessiert da hier bei den meisten Zeichen weniger Platz verbraucht wird beim speichern.

cu
Martin