Как вы обрабатываете кодировку EBCDIC CCSID 65535 без iSeries?

3590
Lazarus

Непонятный вопрос, но, как я знаю, пользователи SU могут помочь с этим.

У меня есть файл из iSeries, который закодирован как CCSID 65535 (двоичный), что в основном означает, что он закодирован в шестнадцатеричном формате (в EBCDIC). Я хотел бы понять, как работает этот формат, поскольку кажется, что он произвольно пропускает шестнадцатеричную кодировку. Например:

4040404040404040404040F3F040404040404040404040F1 0 04040404040404040404040F8F0F0F3F54040404040F3F4F0404040F3F0F3F8F1F1F7F1F0F8404040404040404040404040404040404040 2009E2D5F9F6F0F0F0F0F0F7 0 04040404040404040404040404040404040404040 

Это 40 пробелов EBCDIC, это я знаю, но вы увидите, что в тексте также есть буквальные пробелы. Переходы происходят на нечетных и четных границах байтов, и в первом разделе с литеральными пробелами «F1 0 040» вы увидите шестнадцатеричный код с кодом «1» («F1»), несколько литеральных пробелов, литерал «0», некоторые больше пробелов, снова литерал '0' и затем шестнадцатеричный кодированный пробел. Срывая мои волосы здесь, кажется, нет логики для этого.

Я подозреваю, что «знания» о формате могут храниться в iSeries в отдельном определении, но я не могу найти какую-либо окончательную документацию в Интернете, поэтому я надеюсь, что гуру может знать, как все это сочетается. Любое руководство с благодарностью получено!

1

2 ответа на вопрос

1
nik
Я прочитал эту ссылку, и я думаю, что критической частью может быть определение поля файла, и это то, чего мне не хватает. Я посмотрю, смогу ли я заставить команду iSeries сделать это для меня, но я надеялся, что есть что-то более фундаментальное, чего мне просто не хватает, что исключит необходимость в файле определения, который затем необходимо будет синхронизировать с iSeries. определение. Все равно спасибо (+1) Lazarus 14 лет назад 0
0
Lazarus

Ответ состоял в том, что именно определение поля файла является критической частью. Нет средств для декодирования файла без этой информации. Похоже, что для этого нет библиотек .Net, которые я могу легко найти. Я думаю, что трудность в том, что вам нужно:

  • преобразовать EBCDIC в ASCII (или, более реалистично, в ANSI или UTF-8)
  • декодировать шестнадцатеричные поля (CCSID 65535) в их родной EBCDIC, а затем преобразовывать их
  • вам также необходимо обработать 0E (SI) и 0F (SO), которые заключают в себе двухбайтовый EBCDIC, а также необходимо преобразовать соответствующий набор символов назначения (и кодовую страницу)

Достаточно много сделать для того, что кажется непонятным требованием.