如果我使用ISO-8859-1编码将二进制流读取为String,然后将其转换回二进制流,我是否总是会得到完全相同的字节?如果没有,什么时候我不会得到相同的字节?
public byte[] toStringAndBack(byte[] binaryData) throws Exception {
String s = new String(binaryData, "ISO-8859-1");
return s.getBytes("ISO-8859-1");
}
===编辑===
测试:
byte[] d = {0, 1, 2, 3, 4, (byte)128, (byte)129, (byte)130}; // some not defined values
byte[] dd = toStringAndBack(d);
for (byte b : dd)
System.out.print((b&0xFF) + " ");
输出:
0 1 2 3 4 128 129 130
因此,即使未定义的字节似乎也可以正确转换。
最佳答案
constructor you're using说:
未指定给定字符集中给定字节无效时此构造函数的行为。
因此,从理论上讲,如果ISO-8859-1未将字符分配给任何值(例如0-31和128-160),则可能会失败。
这意味着,即使它在给定的JVM的String
实现(或ISO-8859-1的Charset
实现)上运行,也不能依靠它在另一个JVM的String
/ Charset
实现上运行(是否仅仅是一个来自同一供应商或不同供应商的JVM的JVM不同的dot-rev)。
关于java - ISO-8859-1在Java中编码为二进制安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34786221/