100%安全(异常/无错误)将包含随机二进制数据的byte []通过构造函数转换为String:
new String(bytes);
// -- or --
new String(bytes,"UTF-8"); // Or other charset
我担心的是,无效的UTF-8字节是否会导致异常或其他故障,而不仅仅是可能部分乱码的消息。
我尝试了一些已知的错误字节值,因为它们似乎按预期工作。 E.g:
byte[] bytes = new byte[] {'a','b','c',(byte)0xfe,(byte)0xfe,(byte)0xff,(byte)0xff,'d','e','f'};
String test = new String(bytes,"UTF-8");
System.out.println(test);
打印“abc ???? def”。
我担心的是,如果某些其他组合可能以其他意外方式失败,因为我不能保证我可以测试每个无效组合。
答案 0 :(得分:4)
docs:
中介绍了这一点此方法始终使用此charset的默认替换字符串替换格式错误的输入和不可映射的字符序列
如果您不总是使用UTF-8,那么失败的一件事就是它可以抛出UnsupportedEncodingException。
答案 1 :(得分:3)
如果您想在错误输入上使用解码行为,请使用类似
的内容StandardCharsets.UTF_8
.newDecoder()
.implOnMalformedInput(CodingErrorAction.REPORT)
.implOnUnmappableCharacter(CodingErrorAction.REPLACE)
.implReplaceWith(replacementString)
.decode(ByteBuffer.wrap(byteArray))
.toString();
让你可以旋转所有涉及的旋钮。