1

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

4

2 回答 2

3

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

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

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

于 2014-08-18T15:55:14.570 回答
1

这是一个包含 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]]
}
于 2014-09-25T11:44:29.443 回答