Wirklich ein Dauerthema !
Natürlich gibt es Unicode, aber auch den inzwischen in mehreren Varianten:
UCS-2: 2-Byte-Zeichensatz, ca. 65000 Zeichen
UCS-4: 4-Byte-Zeichensatz (ist allerdings nicht auf der AS/400 verfügbar)

Zusätzlich gibts da noch:
UTF-8: 1-4 Byte pro Zeichen, also variable Breite
UTF-16: 2-4 Byte pro Zeichen

Aber im Terminal (5250) siehts da ganz anders aus:
Standardmäßig arbeitet die Emulation (CA, Telnet, Mocha, usw.) im SBCS-Zeichensatz, d.h. genau 1 Byte pro Zeichen, wobei alle Zeichen EBCDIC < X'40' als Steuerzeichen verloren gehen.
SBCS wird in Sprachräume unterteilt (Latin1-7 und inzwischen mit Varianten).
In diesen Sprachräumen werden variante und nicht variante Zeichen unterschieden:
Nicht variante Zeichen = in allen Sprachräumen identisch
variante Zeichen = können je nach Sprachraum unterschiedlich sein.

Kommen wir nun zum Sprachraum:
In den CCSID's eines Sprachraumes gibt es für jedes Zeichen auch genau ein passendes in ggf. anderem Hexcode, so dass bei der Konvertierung nichts verloren geht.
Konvertiert man allerdings von Sprachraum 1 nach 2 und umgekehrt, bleiben nur die nichtvarianten Zeichen identisch, bei allen anderen kann es zu Verlusten kommen.

Dann gibt es noch den Unterschied zwischen CCSID und CHRID:
CCSID = interne Speicherungsform, also der Hexwert
CHRID = externe Darstellungsform, also das sichtbare Zeichen.

Wie geht die AS/400 damit um (schon mehrfach beschrieben):
Zwischen Datenbank und Job wird eine Codewandlung durchgeführt, sobald beide eine andere CCSID als 65535 haben (HEX). Dazu gehört übrigens auch eine MSGF !

Zwischen Job und Terminal wird nur dann eine Codewandlung durchgeführt, wenn dies per CHRIDCTL auch definiert ist und von den DSPF's, MNU's usw. unterstützt wird.
Ansonsten erfolgt nämlich KEINE Codewandlung.
D.h.: Die CA-Sitzung ist in der Hostcodepage einzustellen, die der Dialogjob verwendet ! Ansonsten kommt es nämlich zum berühmten Datensalat: ö = { u.ä.
Das selbe gilt auch für PRTF's, wobei hier die später zu verwendende CHRID einzustellen ist (bei AFPDS/IPDS auch auf Feldebene möglich). Allerdings sind ggf. WSCST-Objekte zu erstellen, die beim Drucker dann auch eine Codepageumschaltung erreichen.

Die einzig sichere Möglichkeit alle Zeichen für einen Anwender verfügbar zu machen, ist eine Client-Server-Lösung, die die Daten ausschließlich per SQL austauscht, wobei für die AS/400 gilt, dass a) die Daten in UCS-2 (CCSID 13488) gespeichert sind und b) die SQL's auch in UCS-2 ausgetauscht werden (ODBC-Einstellung).

Solange man seine Datenbank immer noch in SBCS speichert und CA-SBCS-Sitzungen verwendet, gibt es ABSOLUT KEINE Möglichkeit, sämtliche Zeichen aller Sprachräume GLEICHZEITIG zu verwenden !