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