java - LG 设备上的 Android 6.0 (Marshmallow) 中的 new String(byte[]) 损坏?

标签 java android eclipse

似乎 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/

相关文章:

java - 使用 @Parameter 的 Hibernate 注释不起作用

java - 可以将 PrintWriters 放在 java List 或 Collection 中吗?

c++ - windows下如何运行通过MSYS安装的pkg-config(for GTK+-3.0)获取绝对路径

java - UIMA 用于结构化数据

java - Spring JDBC 依赖问题

java - 如何从家用电脑访问cPanel中的数据库

android - Android 中 Edittext 背景不透明度的问题

android - 我的风格有什么问题?无法解析符号 Theme.AppCompat.Light.NoActionBar

Android AudioRecord 缓冲区在有意义的值之前以多个 0 开头

java - 在Eclipse上导出应用程序后的不同字符