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