1

通过构造函数将包含随机二进制数据的 byte[] 转换为 String 是否 100% 安全(异常/无错误):

new String(bytes);
// -- or --
new String(bytes,"UTF-8");  // Or other charset

我担心无效的 UTF-8 字节是否会导致异常或其他故障,而不仅仅是可能部分乱码的消息。

我尝试了一些已知的坏字节值,因为它们似乎按预期工作。例如:

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”。

我担心某些其他组合是否会以其他意想不到的方式失败,因为我不能保证我可以测试每个无效组合。

4

2 回答 2

4

文档中对此进行了介绍:

此方法始终使用此字符集的默认替换字符串替换格式错误的输入和不可映射的字符序列

如果您不总是使用 UTF-8,将会失败的一件事是它可以抛出UnsupportedEncodingException

于 2012-08-28T22:06:25.950 回答
4

如果您想在错误输入上处理解码行为,请使用类似

StandardCharsets.UTF_8
  .newDecoder()
  .implOnMalformedInput(CodingErrorAction.REPORT)
  .implOnUnmappableCharacter(CodingErrorAction.REPLACE)
  .implReplaceWith(replacementString)
  .decode(ByteBuffer.wrap(byteArray))
  .toString();

它可以让您旋转所有涉及的各种旋钮。

于 2012-08-28T22:55:29.583 回答