gpt4 book ai didi

Java 8 在 UTF-8 解码方面的变化

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:34 24 4
gpt4 key购买 nike

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

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

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

根据answer对此SO post ,Java 8“修复”了 Java 7 中的一个错误,并用符合 UTF-8 规范的替换字符串替换了无效的 UTF-8 字节序列。

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

我们尝试在 Java 8 上使用 CharsetDecoder 和 CodingErrorAction 作为 REPLACE、REPORT 和 IGNORE。但是,我们无法生成与 Java 7 相同的字符串。

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

最佳答案

根据@Holger 提供的指示,很明显我们必须编写自定义 CharsetDecoder。

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

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

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

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

关于Java 8 在 UTF-8 解码方面的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30575509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com