繁体   English   中英

从无效(对于字符集)byte []进行转换时,Java String的行为(安全)?

[英]Behavior (safety) of Java String when converting from invalid (for the charset) byte[]?

通过构造函数将包含随机二进制数据的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”。

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

这涵盖在文档中

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

如果您不总是使用UTF-8,将会失败的一件事是,它可能引发UnsupportedEncodingException

如果您想对不良输入进行解码,请使用类似

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

这使您可以旋转所有涉及的各种旋钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM