我有以下 Java 代码:
byte[] signatureBytes = getSignature();
String signatureString = new String(signatureBytes, "UTF8");
byte[] signatureStringBytes = signatureString.getBytes("UTF8");
System.out.println(signatureBytes.length == signatureStringBytes.length); // prints false
Q:我可能误解了这一点,但我认为new String(byte[] bytes, String charset)
and String.getBytes(charset)
是逆运算吗?
Q:作为后续,将 byte[] 数组作为字符串传输的安全方法是什么?
不是每个byte[]
是有效的 UTF-8。默认情况下,无效序列会被固定字符替换,我认为这就是长度变化的原因。
尝试 Latin-1,它不应该发生,因为它是一个简单的编码,每个byte[]
是有意义的。
Windows-1252 也不应该发生这种情况。那里有未定义的序列(实际上是未定义的字节),但所有字符都编码在单个字节中。新的byte[]
可能与原始的不同,但它们的长度必须相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)