Android 9中引入的行为变化之一是更严格的UTF-8解码器。如果我们有一个字节数组不是正确的 UTF-8 字符串(例如随机字节或一些二进制数据),并尝试从中创建一个字符串:
return new String(bytes)
Android将选择UTF-8作为首选编码(这很好),但在Android 9上返回的结果与在旧版本的Android上略有不同。
我知道将随机字节转换为UTF-8字符串听起来并不是一个好主意,但我现在需要向后兼容。
有没有一个选项可以在所有Android版本上获得完全相同的字符串结果?
编辑:
重现步骤:
byte[] bytes = new byte[]{25, 17, 113, 18, 62, 121, -6, -71, 45, -126, -113, 122, 58, 49, -30, -53, -66, -7, 0, -41};
char[] password = new String(bytes).toCharArray();
byte[] passKey = PBEParametersGenerator.PKCS12PasswordToBytes(password);
Log.d("TEST", "Bytes: ".concat(Arrays.toString(passKey)));
安卓<9.0的输出:
[0, 25, 0, 17, 0, 113, 0, 18, 0, 62, 0, 121, -1, -3, 0, 45, -1, -3, -1, -3, 0, 122, 0, 58, 0, 49, -1, -3, 2, -2, -1, -3, 0, 0, -1, -3, 0, 0]
安卓9.0的输出:
[0, 25, 0, 17, 0, 113, 0, 18, 0, 62, 0, 121, -1, -3, -1, -3, 0, 45, -1, -3, -1, -3, 0, 122, 0, 58, 0, 49, -1, -3, 2, -2, -1, -3, 0, 0, -1, -3, 0, 0]
小唯快跑啊
像这种IE6~8不支持的兼容性问题如何解决?
flex 在android 兼容性?
ES6现在的兼容性如何?
border如何做倒三角,兼容性有好的
相关分类