Wie verarbeiten Sie die EBCDIC CCSID 65535-Codierung ohne iSeries?

3819
Lazarus

Eine obskure Frage, aber genau die Art, mit der SU-Benutzer vielleicht helfen können.

Ich habe eine Datei von einer iSeries erhalten, die als CCSID 65535 (binär) codiert ist. Dies bedeutet im Wesentlichen, dass sie hexadezimal codiert ist (in EBCDIC). Ich würde gerne wissen, wie dieses Format funktioniert, da es scheinbar willkürlich in die Hex-Kodierung hinein- und herausspringt. Zum Beispiel:

4040404040404040404040F3F040404040404040404040F1 0 04040404040404040404040F8F0F0F3F54040404040F3F4F0404040F3F0F3F8F1F1F7F1F0F8404040404040404040404040404040404040 2009E2D5F9F6F0F0F0F0F0F7 0 04040404040404040404040404040404040404040 

Die 40 sind EBCDIC-Leerzeichen, das weiß ich, aber Sie werden sehen, dass der Text auch wörtliche Leerzeichen enthält. Die Übergänge finden an ungeraden und geraden Byte-Grenzen statt. Wenn Sie im ersten Abschnitt mit wörtlichen Leerzeichen "F1 0 040" suchen, sehen Sie eine hexadezimal codierte "1" ("F1"), mehrere wörtliche Leerzeichen, eine wörtliche "0" und einige mehr Leerzeichen, wieder ein Literal '0' und dann ein hexadezimal codiertes Leerzeichen. Wenn ich meine Haare hier risse, scheint es keine Logik zu geben.

Ich vermute, dass das "Wissen" für das Format in der iSeries in einer separaten Definition enthalten ist, aber ich kann keine endgültige Dokumentation im Web finden. Ich hoffe, dass ein Guru hier weiß, wie das alles zusammenpasst. Jede Anleitung dankbar erhalten!

1

2 Antworten auf die Frage

1
nik

Haben Sie diese Referenz überprüft: Verwerfen Sie Ihre Datenkonvertierungsprobleme

Ich hatte diese Referenz gelesen, und ich denke, das entscheidende Element könnte die Dateifelddefinition sein, und das ist es, was mir fehlt. Ich werde sehen, ob ich das iSeries-Team dazu bringen kann, das für mich auszugeben, aber ich hatte gehofft, dass etwas grundlegenderes fehlte, was ich einfach vermisste. Dies würde die Notwendigkeit einer Definitionsdatei ausschließen, die dann mit der iSeries synchronisiert werden müsste Definition. Trotzdem danke (+1) Lazarus vor 14 Jahren 0
0
Lazarus

Die Antwort war, dass die Dateifelddefinition das kritische Element ist. Es gibt keine Möglichkeit, die Datei ohne diese Informationen zu decodieren. Es scheint auch keine .Net-Bibliotheken dafür zu geben, die ich leicht finden kann. Ich denke, die Schwierigkeit besteht darin, dass Sie:

  • Umwandlung von EBCDIC in ASCII (oder realistischer ANSI oder UTF-8)
  • decodieren Sie die hexadezimal codierten Felder (CCSID 65535) in ihre native EBCDIC und konvertieren Sie diese ebenfalls
  • Sie müssen auch die Werte 0E (SI) und 0F (SO) behandeln, die das Doppelbyte-EBCDIC umfassen, und außerdem den entsprechenden Zielzeichensatz (und die Codepage) konvertieren.

Viel zu tun für etwas, das als obskure Anforderung erscheint.