Java 8更改UTF-8解码

最近,我们将应用程序从JDK 7迁移到了JDK8。更改之后,我们遇到了以下代码段的问题。

String output = new String(byteArray, "UTF-8");

字节数组可能包含无效的UTF-8字节序列。UTF-8解码时,相同的字节数组在Java 7和Java 8上产生两个不同的字符串。

根据此SO帖子的答案,Java

8“修复”了Java7中的错误,并用替换字符串替换了无效的UTF-8字节序列,该字符串符合UTF-8规范。

但是我们想坚持使用Java 7的解码字符串版本。

我们尝试在Java8上将CharsetDecoder与CodingErrorAction一起用作REPLACE,REPORT和IGNORE,但是,我们仍然无法生成与Java7相同的字符串。

我们可以用合理复杂性的技术做到这一点吗?

回答:

从@Holger提供的指针来看,很明显,我们必须编写一个自定义CharsetDecoder。

我复制了OpenJDK的sun.nio.cs.UTF_8类的版本,将其重命名为CustomUTF_8并使用它来构造这样的字符串

String output = new String(bytes, new CustomUTF_8());

我计划运行广泛的测试,以交叉验证Java 7和Java8上生成的输出。这是一个临时解决方案,而我试图解决将hmac的输出直接传递给String而不首先进行Base64编码的实际问题。

 String output = new String(Base64.Encoder.encode(bytes), Charset.forname("UTF-8"));

以上是 Java 8更改UTF-8解码 的全部内容, 来源链接: utcz.com/qa/409587.html

回到顶部