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 解码器解析这些压缩字符串,我需要删除换行符。
问题:
我是否删除 \r\n
(Unix) 或 \n
(Windows) 或 \r
(旧 Mac)?因为字符串取决于它们被编码的机器
如果我说 zippedString.replaceAll("\r", "").replaceAll("\n", "")
我如何确保我不会在实际字符串中包含 \r
字符,从而导致数据损坏?
是否有任何其他方法可以在这两种机制之间建立桥梁?
Base64 中没有白色 space 所以我会删除所有。
String toDecode = str.replaceAll("\s+", "");
这消除了关于如何处理特定换行符或 spaces 的任何歧义。
此处‘\r’和‘\n’字符的用途纯粹与文本格式相关,您可以假设它们是不可见的。
读取字符串值的代码应该负责过滤掉它们,无论使用什么方法,例如
读取行 -> trim -> 连接
然后,对连接的字符串进行解码。
题外话,假设应用了不同的编码算法,这些字符是编码字母表的一部分。因为 Java 将 '\r' 和 '\n' 字符解释为换行符(取决于操作系统),编码值的字符串表示形式需要转义,例如“14y6\\ n75b……”。 然而,这带来的问题多于好处,因此应该避免。
我在数据库中有一堆字符串,不久前用 sun.misc.BASE64Encoder
编码。
现在我想用 java.util.Base64
解码(并进一步编码字符串)。
两者的区别是Sun的每n个字符加了一个换行符
示例:
Sun Base64: 54y49568uyj304j534w5y
34y0639j6yh93j5h0653j
s45hr68o
JDK8 Base64: 54y49568uyj304j534w5y34y0639j6yh93j5h0653js45hr68o
为了让 JDK 解码器解析这些压缩字符串,我需要删除换行符。
问题:
我是否删除
\r\n
(Unix) 或\n
(Windows) 或\r
(旧 Mac)?因为字符串取决于它们被编码的机器如果我说
zippedString.replaceAll("\r", "").replaceAll("\n", "")
我如何确保我不会在实际字符串中包含\r
字符,从而导致数据损坏?是否有任何其他方法可以在这两种机制之间建立桥梁?
Base64 中没有白色 space 所以我会删除所有。
String toDecode = str.replaceAll("\s+", "");
这消除了关于如何处理特定换行符或 spaces 的任何歧义。
此处‘\r’和‘\n’字符的用途纯粹与文本格式相关,您可以假设它们是不可见的。
读取字符串值的代码应该负责过滤掉它们,无论使用什么方法,例如
读取行 -> trim -> 连接
然后,对连接的字符串进行解码。
题外话,假设应用了不同的编码算法,这些字符是编码字母表的一部分。因为 Java 将 '\r' 和 '\n' 字符解释为换行符(取决于操作系统),编码值的字符串表示形式需要转义,例如“14y6\\ n75b……”。 然而,这带来的问题多于好处,因此应该避免。