java OutputStreamWriter和CP437

时间:2015-03-25 10:29:34

标签: java

我正在尝试以下代码,我的问题是我用来获取字节数组的字符

charÉ应根据其charset集对应144,但是当我运行代码时,我得到了-55的值,

如果我使用$我会得到36这是正确的吗?

感谢您的帮助

try {
   ByteArrayOutputStream result = new ByteArrayOutputStream();
   Writer wr = new OutputStreamWriter(result, "CP437");
   wr.write("É");//
   wr.close();
   ba2 = result.toByteArray();
   result.close();

} catch (Exception x) {
   x.printStackTrace();
}

1 个答案:

答案 0 :(得分:2)

CP437编码需要8位存储,我执行你的代码并发现存储在一个字节中的值为-112,对应144的É超出了标准字节的范围(-127到128)。将其转换为无符号或正值以获得正确的结果,使用以下代码转换为无符号值:

public static int unsignedToBytes(byte b) {
    return b & 0xFF;
}

打印此值:

System.out.println(unsignedToBytes((byte) ba2[0]));

给出144这是您所需的值。