使用 JAVA 将 EBCDIC 转换为 ASCII

EBCDIC to ASCII conversion using JAVA

我正在尝试将大型机固定长度文件从 EBCDIC 格式转换为 ASCII 格式。目前我正在使用 JZOS api (ZFile) 读取文件并逐字段转换。是否可以通过仅读取记录或行的整个字节来在不知道文件布局(又名 COPYBOOK)的情况下进行转换?如果是,如何处理压缩小数和二进制值?

is it possible to convert without knowing the layout of file (aka COPYBOOK) by just reading entire bytes of a record or line?

没有

文本字段必须从 EBCDIC 转换为 ASCII。二进制和压缩十进制字段 必须 被转换。如果您转换二进制字段,那么您将改变它们的值,有可能(可能?一定?)您会破坏它们的值。

来自大型机的二进制字段将是大端,您可能需要将它们转换为小端。半字中的 +10 在大型机上是 x'000A',而在小端机器上是 x'0A00'。

压缩十进制字段可能具有隐含的小数位。如果您的文件包含可能代表 +123.45 或 +12,345 的 x'12345C'。字段的格式告诉您如何解释数据。

如果不知道包括字段格式在内的记录布局,则无法进行转换。

根据我的经验,避免这些困难的最好方法是在大型机上预处理文件,将所有二进制和压缩十进制字段转换为嵌入显式符号和小数点的文本。然后文件可以安全地通过代码页(在本例中为 EBCDIC 到 ASCII)转换。

此类预处理可以使用大型机 SORT 实用程序轻松完成,通常 excel 在数据转换时使用。