Welche Codepage / charset sollten von einem MVS-System Daten zu interpretieren kommen in eine Java-Umgebung eingesetzt werden?

StackOverflow https://stackoverflow.com/questions/818759

Frage

Ich habe in ein interessantes Problem kommen (wie im Umgang mit Legacy-Systemen oft der Fall ist). Ich arbeite an einer Anwendung (die derzeit läuft auf einem x86-Linux oder Windows-System), die Anforderungen von einer Vielzahl von Systemen empfangen kann, einer von ihnen ein MVS-System zu sein.

Ich bin versucht, zu bestimmen, welche Codepage / charset Ich soll aus den MVS kommenden Systemanforderungsdaten interpretieren werden.

In der Vergangenheit habe ich verwendet ‚CP500‘ (IBM-500) Byte Datum zu interpretieren für z / OS-Systeme kommen, aber ich befürchte, dass da MVS ist ein bisschen eines Legacy-System, und das seit IBM schien es ist Geist in Bezug auf konsequent ändern, was Codierung zu verwenden (es muß Zehn EBCDIC Codierungen sein), kann das CP500 nicht die richtige Codierung sein.

Die beste Ressource, die ich auf Zeichensätze in Java gefunden habe, ist: http://mindprod.com/jgloss / Kodierung . Doch von dieser Seite, und IBM Infocenter, ich habe es nicht gelungen, eine klare Antwort zu erhalten.

EDIT: Hinzugefügt von meiner Antwort auf Pax unter:

Es war ein eklatantes Loch in meiner Frage in der Herkunft der Anforderungsdaten. In diesem Fall ist der Ursprung der Daten durch eine Websphere MQ-Schnittstelle. Websphere MQ hat Einrichtungen für die auf die richtige Codierung zu übersetzen, aber das ist nur für die Daten mit MQMessage.readString Lesen (), die als veraltet, da wurde. Ich würde es vorziehen, diese zu verwenden, aber ich einen proprietäre Schnittstelle Rahmen verwenden, in dem ich nicht ändern kann, wie die Nachricht die MQQueue abzulesen ist, die Bytes direkt aus der Warteschlange liest und so verlassen ich bin Griff Übersetzung.

Final Answer: Ich wollte auf diese verfolgen. Es stellt sich heraus den richtigen Zeichensatz in der Tat CP500 war (IBM-500). Aber ich habe den Eindruck, dass die Ergebnisse können variieren. Einige Tipps für jemanden anderes mit dem gleichen Problem:

Nutzen Sie Charset.availableCharsets () ;. Dies wird Ihnen eine Karte der unterstützten Zeichensätze in Ihrer Laufzeit. Ich iteriert diese Sätze durch und gedruckt meine Byte Daten in diesen Zeichensatz übersetzt werden. Es ist zwar nicht mir die Antwort geben habe ich wollte (vor allem, weil ich nicht in der Lage war, Daten zu lesen, wie es kommen würde in), stelle ich mir es für andere nützlich sein könnte.

Siehe auch: http://mindprod.com/jgloss/encoding für eine Liste der unterstützten char-Sets.

Schließlich, obwohl ich dies nicht bestätigt haben, sondern sicherzustellen, dass Sie die richtige JRE verwenden. Ich denke, dass das IBM Runtimes unterstützt mehr EBCDIC-Zeichensätze dann OpenJDK oder Sun Runtimes.

War es hilfreich?

Lösung

"MVS ist ein bisschen ein Legacy-System"? Ha! Es ist immer noch das Betriebssystem der Wahl für Anwendungen, bei denen Zuverlässigkeit die Sorge Nummer eins ist. Nun zu Ihrer Frage: -)

Es hängt ganz davon ab, was die Daten erzeugt. Zum Beispiel sind, wenn Sie nur Dateien vom Host-Download kann die FTP-Verhandlung damit umgehen. Aber da Sie Java erwähnen, ist es wahrscheinlich über JDBC auf DB2 / z verbindet, und die JDBC-Treiber wird es handhaben recht gut (viel besser, wenn Sie verwenden IBMs eigene JRE anstatt die Sun-Version).

EBCDIC sich auf dem Host hat einige unterschiedliche Kodierungen so müssen Sie mindestens, um uns mitzuteilen, wo die Daten kommen. Neuere Versionen von DB2 haben kein Problem mit Unicode in der Datenbank zu speichern, die alle Ihre Anliegen lindern würden.

Erste Aufgabe, herauszufinden, wo die Daten kommen und die Codierung von Ihrem SYSPROG (wenn es nicht automatisch behandelt wird).

Update:

Andrew, basierend auf Ihren zusätzlichen Text, in dem Sie nicht die zur Verfügung gestellten Übersetzungen verwenden angeben können, dann werden Sie die manuelle Methode zu verwenden haben. Sie müssen die Quelle der Daten identifizieren und die CCSID aus, dass zu bekommen. Dann machen Sie die Übersetzung und von Unicode (oder was auch immer Codepage Sie verwenden, wenn nicht Unicode) manuell.

CCSID 500 ist die Standard-Codepage für EBCDIC International (kein Euro), aber diese Maschinen sind über den ganzen Planeten verwendet. z / OS Conversion Services ist, wie Sie in der Regel tun, um die Konvertierung auf dem Mainframe.

Obwohl diese eine iSeries Seite ist, es enthält eine große Anzahl von CCSIDs und ihre Glyphen für den Mainframe als auch.

Sie müssen wahrscheinlich nur, um herauszufinden, ob Sie CCSID 500 oder 37 (oder einer der fremdsprachigen Versionen) und erarbeiten die Abbildung mit Unicode-CCSID verwenden 1208. Ihre SYSPROG werden Sie in der Lage zu sagen, eine, die. Wenn Sie sich für ein US-Unternehmen arbeiten, es wahrscheinlich 500 oder 37, aber IBM aufwendet viel Aufwand Unterstützung mehrerer Codepages. Ich werde froh sein, wenn alle ihre Mainframe-Software speichert und nutzt Unicode standardmäßig wird es die Dinge viel einfacher machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top