我写了一个简单的java程序,将EBCDIC转换为ASCII。它无法正常工作。这就是我做的事情
Step 1: Convert ASCII file to EBCDIC using the following command :
dd if=sampleInput.txt of=ebcdic.txt conv=ebcdic
sampleInput.txt has following line :
input 12 12
第1步:生成ebcdic.txt
现在,编写以下java程序将ebcdic转换为ascii
public class CoboDataFilelReaderTest {
public static void main(String[] args) throws IOException {
int line;
InputStreamReader rdr = new InputStreamReader(new FileInputStream("/Users/rr/Documents/workspace/EBCDIC_TO_ASCII/ebcdic.txt"), java.nio.charset.Charset.forName("ibm500"));
while((line = rdr.read()) != -1) {
System.out.println(line);
}
}
}
它给了我错误的输出,输出看起来像这样:
115
97
109
112
108
101
32
49
50
32
49
50
请让我知道我做错了什么以及如何解决。
答案 0 :(得分:4)
通过调用rdr.read()
,您读取一个字节。如果您想要读取一个文本字符而不是它的数字表示,您可以将其转换为如下字符:
int numericChar;
InputStreamReader rdr = new InputStreamReader(new FileInputStream("/Users/rr/Documents/workspace/EBCDIC_TO_ASCII/ebcdic.txt"), java.nio.charset.Charset.forName("ibm500"));
while((numericChar = rdr.read()) != -1) {
System.out.println((char) numericChar);
}
如果您将每个numericChar
作为一个字节写入文件,则两个文件看起来都是一样的。但是您正在写入控制台而不是文件,因此它将内容表示为数字而不是将其解释为字符。
如果您想逐行输出内容,可以这样做:
int numericChar;
InputStreamReader rdr = new InputStreamReader(new FileInputStream("/Users/rr/Documents/workspace/EBCDIC_TO_ASCII/ebcdic.txt"), java.nio.charset.Charset.forName("ibm500"));
while((numericChar = rdr.read()) != -1) {
System.out.print((char) numericChar);
}
这不会在每个角色后开始换行。
System.out.println()
和System.out.print()
之间的区别在于,println
会在通过附加换行符\n
来打印值后开始换行。
答案 1 :(得分:1)
您需要将line
(代表单个字符的int
的可怕名称)强制转换为char
,就像这样。
System.out.println((char) line);