【问题标题】:example EBCDIC file for Java program to convert EBCDIC to ASCII用于将 EBCDIC 转换为 ASCII 的 Java 程序的示例 EBCDIC 文件
【发布时间】:2014-08-18 15:42:04
【问题描述】:

我正在尝试使用以下代码将 EBCDIC 文件转换为 ASCII:

InputStreamReader rdr = new InputStreamReader(new FileInputStream(<your file>),java.nio.Charset.forName("ibm500"));    
    while((String line = rdr.readLine()) != null) {
        System.out.println(line);

我正在尝试查找 EBCDIC 格式的示例文件,以将其作为输入发送到该程序。任何人都可以请我指向一个示例文件。在网上找不到任何东西。

【问题讨论】:

  • 如果您没有任何 EBCDIC 文件,为什么要在 EBCDIC 和 ASCII 之间进行转换?
  • 试想一下可以使用 IBM“大铁”盒子的人——通常是 370 或 iSeries。 (如果你在大学,那么大学商务办公室可能会使用 IBM 设备,礼貌地询问可能会得到你需要的东西。)如果做不到这一点,你总是可以将 ASCII 文件转换为 EBCDIC,然后再返回。
  • 由于 EBCDIC 是一种回水字符编码,您可能需要创建自己的编码。我建议你看看 dd linux 命令,它将进行转换Linux/Unix Command: dd

标签: java ebcdic


【解决方案1】:

您可以在 Unix 上使用 iconv 实用程序在字符编码之间进行转换。它也可用于 Windows(例如,它是您可以在 Cygwin 中安装的可选软件包)。也可以使用dd命令转换字符编码。

dd if=ascii.txt of=ebcdic.txt conv=ebcdic

您还应该能够使用 Java 进行与当前方式不同的转换。只需将文件读取为 ASCII 并将其写入为 EBCDIC。

【讨论】:

    【解决方案2】:

    这是一个包含 255 个 EBCDIC 字符的数组:

    var ebcdic = [
    'NUL', // Null
    'SOH', // Start of Heading
    'STX', // Start of Text
    'ETX', // End of Text
    'PF',  // Punch Off
    '\t',  // Horizontal Tab
    'LC',  // Lower Case
    'DEL', // Delete
    ' ', ' ',
    'SMM', // Start of Manual Message
    '\v',  // Vertical Tab
    '\f',  // Form Feed
    'CR',  // Carriage Return
    'SO',  // Shift Out
    'SI',  // Shift In
    'DLE', // Data Link Escape
    'DC1', // Device Control 1
    'DC2', // Device Control 2
    'TM',  // Tape Mark
    'RES', // Restore
    '\n',  // New Line
    '\h',  // Backspace
    'IL',  // Idle
    'CAN', // Cancel
    'EM',  // End of Medium
    'CC',  // Cursor Control
    'CU1', // Customer Use 1
    'IFS', // Interchange File Separator
    'IGS', // Interchange Group Separator
    'IRS', // Interchange Record Separator
    'IUS', // Interchange Unit Separator
    'DS',  // Digit Select
    'SOS', // Start of Significance
    'FS',  // Field Separator
    ' ',
    'BYP', // Bypass
    '\n',  // Line Feed
    'ETB', // End of Transmission Block
    'ESC', // Escape
    ' ', ' ',
    'SM',  // Set Mode
    'CU2', // Customer Use 2
    ' ',
    'ENQ', // Enquiry
    'ACK', // Acknowledge
    'BEL', // Bell
    ' ', ' ',
    'SYN', // Synchronous Idle
    ' ',
    'PN',  // Punch On
    'RS',  // Reader Stop
    'UC',  // Upper Case
    'EOT', // End of Transmission
    ' ', ' ', ' ',
    'CU3', // Customer Use 3
    'DC4', // Device Control 4
    'NAK', // Negative Acknowledge
    ' ',
    'SUB', // Substitute
    ' ', // Space
    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
    '¢', '.', '<', '(', '+', '|', '&', 
        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
    '!', '$', '*', ')', ';', '¬', '-', '/', 
    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
    ',', '%', '_', '>', '?', 
    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
    ':', '#', '@', '\'','=', '\"',' ',
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 
    ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
    'j',  'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 
    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
    's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 
    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
    ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
    '`', // Grave Accent
    ' ', ' ', ' ', ' ', ' ', ' ', ' ',
    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 
    ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
    'J',  'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 
    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
    'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
    ' ', ' ', ' ', ' ', ' ', ' ', 
    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
    ' ', ' ', ' ', ' ', ' ', ' '
    ]
    

    然后您可以使用 EBCDIC 编码的文本转换缓冲区,如下所示:

    var result = ''
    for (var i = 0; i < buffer.length; i++) {
        result += ebcdic[buffer[i]]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 2010-10-17
      • 1970-01-01
      相关资源
      最近更新 更多