示例JavaCD程序的EBCDIC文件,用于将EBCDIC转换为ASCII

时间:2014-08-18 15:42:04

标签: java ebcdic

我正在尝试使用以下代码将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格式的示例文件,以将其作为此程序的输入发送。任何人都可以请我指向一个示例文件。在网上找不到任何东西。

2 个答案:

答案 0 :(得分:2)

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

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

您还应该能够使用Java从您当前正在执行的方式向另一个方向进行转换。只需将文件读取为ASCII并将其写为EBCDIC。

答案 1 :(得分:0)

这是一个包含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]]
}