使用Java将EBCDIC Comp-3文件转换为ASCII文件值是否可行?

3
我正在尝试将EBCDIC COMP-3字段转换为ASCII值,但是这种方法行不通。但二进制COMP-3字段可以转换为ASCII值。请帮助我理解这是否可能。即使使用其他Java库也可以。我尝试并搜索了很多,但没有找到确切的答案。
更新:
在我的上一个问题中,二进制应该是可行的。这是我收到的答案,但是关于EBCDIC COMP-3没有明确的说明。
复制本:
001700 01 EMP-RECORD.                                                           
001900        10  EMP-NO                     PIC 9(10).                         
002000        10  EMP-NAME                   PIC X(30).                         
002100        10  EMP-ADDRESS                PIC X(30).                         
002200        10  EMP-SALARY                 PIC S9(8)V9(2) COMP-3.             
002200        10  EMP-ZIPCODE                PIC 9(4).                          
BINARY COMP-3 文件:可以进行转换。
  ËÍ>ÁÁ% ,Í_/Ê Ê                Â/>Å/%?ÊÁ                        Á~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ¢|ëá&ç                        ïçñèá ãñá<à                     ÊÊ>     

EBCDIC COMP-3: 无法转换


0000001001suneel kumar r                city                       e¡5671   

程序:

public static void main(String args[]) throws Exception {
    String salesFile = "empcompnewbinary.txt";
    String copybookName = "EMPCOPYBOOK.txt";
    AbstractLine saleRecord;

    int fileStructure = Constants.IO_FIXED_LENGTH;
    CobolIoProvider ioProvider = CobolIoProvider.getInstance();
    AbstractLineReader reader = ioProvider.getLineReader(fileStructure, Convert.FMT_MAINFRAME,
            CopybookLoader.SPLIT_NONE, copybookName, salesFile);

    while ((saleRecord = reader.read()) != null) {
        System.out.print(saleRecord.getFieldValue("EMP-NO").asString() + "-"
                + saleRecord.getFieldValue("EMP-NAME").asString() + "-"
                + saleRecord.getFieldValue("EMP-ADDRESS").asString() + "-"
                + saleRecord.getFieldValue("EMP-SALARY").asDouble() + "-"
                + saleRecord.getFieldValue("EMP-ZIPCODE").asString());
    }
    reader.close();
}

1
可能是如何使用Java解包COMP-3数字?的重复问题。 - SaggingRufus
1
我相信 jt400.jar(用于 AS/400,又称 i)包含一些您可能会发现有用的辅助方法。 - Thorbjørn Ravn Andersen
你能提供原始文件吗?也许可以在 https://sourceforge.net/projects/jrecord/ 上上传它们。 - Bruce Martin
这篇关于在RecordEditor中使用代码生成器的答案可能会有所帮助:https://dev59.com/wKXja4cB1Zd3GeqPPE_l#46313341 - Bruce Martin
1
@BruceMartin 在你的回答中提到了“从主机传输二进制文件”。但我没有二进制文件,我有EBCDIC文件。 - sunleo
1
一个二进制主机将是一个EBCDIC文件。我会更新问题。 - Bruce Martin
1个回答

2
没有所谓的“EBCDIC COMP-3字段”,也没有等效的ASCII代码点。它是一种二进制格式,因此你需要了解记录中混合了字符和二进制格式。
Comp-3是压缩十进制格式。不同的机器体系结构可能会略有不同,例如数字符号半字节的位置等,但它是一种二进制格式,因此任何尝试使用字符集规则进行转换的尝试都将失败。
处理这个问题最简单的方法是将任何压缩十进制数据转换为由字符组成的显示格式。因此,将x'0123456C'转换为c'01234.56',然后你的标准EBCDIC到ASCII转换就能正常工作了。

1
谢谢,这很有帮助。 - sunleo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接