Java Base64 Sun 到 JDK8

Java Base64 Sun to JDK8

我在数据库中有一堆字符串,不久前用 sun.misc.BASE64Encoder 编码。

现在我想用 java.util.Base64 解码(并进一步编码字符串)。

两者的区别是Sun的每n个字符加了一个换行符

示例:

Sun Base64:   54y49568uyj304j534w5y
              34y0639j6yh93j5h0653j
              s45hr68o

JDK8 Base64:  54y49568uyj304j534w5y34y0639j6yh93j5h0653js45hr68o

为了让 JDK 解码器解析这些压缩字符串,我需要删除换行符。

问题:

  1. 我是否删除 \r\n (Unix) 或 \n (Windows) 或 \r(旧 Mac)?因为字符串取决于它们被编码的机器

  2. 如果我说 zippedString.replaceAll("\r", "").replaceAll("\n", "") 我如何确保我不会在实际字符串中包含 \r 字符,从而导致数据损坏?

  3. 是否有任何其他方法可以在这两种机制之间建立桥梁?

Base64 中没有白色 space 所以我会删除所有。

String toDecode = str.replaceAll("\s+", "");

这消除了关于如何处理特定换行符或 spaces 的任何歧义。

此处‘\r’和‘\n’字符的用途纯粹与文本格式相关,您可以假设它们是不可见的。

读取字符串值的代码应该负责过滤掉它们,无论使用什么方法,例如

读取行 -> trim -> 连接

然后,对连接的字符串进行解码。

题外话,假设应用了不同的编码算法,这些字符是编码字母表的一部分。因为 Java 将 '\r' 和 '\n' 字符解释为换行符(取决于操作系统),编码值的字符串表示形式需要转义,例如“14y6\\ n75b……”。 然而,这带来的问题多于好处,因此应该避免。