似乎 new String(byte[])
在 LG LS770 (LG Stylo) 设备上的 Android 6.0 中严重损坏。考虑以下因素:
byte[] buf = new String("This is a test").getBytes("UTF-8");
int len = buf.length;
String s = new String(buf, "UTF-8");
在运行 Android 6.0 的 LGLS770 上执行此操作时,buf
包含正确的字节值,并且 buf.length
正确返回 14,但从 buf 创建新字符串会返回空字符串“”,而它应该返回“This is a test”。是否指定 Charset 似乎没有任何区别。
这只是 LG 实现中的一个错误,还是 Android 6.0 中的一个普遍错误?当运行 Android 5.1 时,上述测试在同一设备上运行良好。其他人可以在运行 Android 6.0 的不同设备上尝试此操作并报告结果吗?谢谢。
更新:
我在 Eclipse 中运行它,所以我想我应该在 Android Studio 中尝试它,因为 Eclipse 不再受到官方支持。似乎在 Android Studio 中工作正常。我想在 Eclipse 中做 Android 6.0 的所有赌注都已结束,所以我必须将所有旧项目转换为 Android Studio(叹气)...有趣的是,问题只发生在设备上,而不是模拟器上。
最佳答案
此破解应该适用于搭载 Android 6 的 LG:
String tmpString = new String(buffer, "UTF-8");
if (tmpString.length() == 0 && android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
Charset utf8 = StandardCharsets.UTF_8;
tmpString = String.valueOf(utf8.newDecoder().decode(ByteBuffer.wrap(buffer)));
}
关于java - LG 设备上的 Android 6.0 (Marshmallow) 中的 new String(byte[]) 损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35141192/