-1

//问题解决了

我编写了一个将 EBCDIC 字符串转换为十六进制的程序。我对一些迹象有疑问。

所以,我将字符串读取为字节,然后将它们更改为十六进制(每两个符号)

问题是,JAVA根据https://shop.alterlinks.com/ascii-table/ascii-ebcdic-us.php将 Decimal ASCII 136符号转换为 Decimal ASCII 63

这是有问题和错误的,因为它是唯一错误的转换字符。

UltraEdit 中的 EBCDIC 88

//编辑添加的代码

int[] bytes = toByte(0, 8);
String bitmap = hexToBin(toHex(bytes));

//ebytes[] - ebcdic string
public int[] toByte(int from, int to){
    int[] newBytes = new int[to - from + 1];
    int k = 0;
    for(int i = from; i <= to; i++){
        newBytes[k] = ebytes[i] & 0xff;
        k++;
    }
    return newBytes;
}

public String toHex(int[] hex){
    StringBuilder sb = new StringBuilder();
    for (int b : hex) {
        if(Integer.toHexString(b).length() == 1){
            sb.append("0" + Integer.toHexString(b));
        }else{
            sb.append(Integer.toHexString(b));
        }
    }
    return sb.toString();
}

public String hexToBin(String hex){
    String toReturn = new BigInteger(hex, 16).toString(2);
    return String.format("%" + (hex.length() * 4) + "s", toReturn).replace(' ', '0');
}

//编辑2

将 Eclipse 中的编码更改为 ISO-8859-1 有所帮助,但是在从文件中读取文本时我丢失了一些符号。

//编辑3

通过改变读取文件的方式解决了问题。

现在,我逐字节读取它并将其解析为字符。以前是一行一行的。

4

2 回答 2

0

解决方案。

  • 将 Eclipse 中的编码更改为更合适(在我的示例 ISO-8859-1 中)。
  • 改变读取文件的方式。

现在,我逐字节读取它并将其解析为字符。

之前,它是逐行的,这就是我丢失一些字符的方式。

于 2015-12-30T10:54:37.840 回答
0

没有 136 的 ASCII 值,因为 ASII 只有 7 位 - 超过 127 的所有内容都是一些自定义扩展代码页(链接表似乎使用某种 Windows 代码页,例如 Cp1252)。由于它正在打印 a ?,因此您使用的代码页似乎没有分配给值 136 的字符 - 例如某种 ISO-8859 风格。

于 2015-12-28T10:00:04.373 回答