【发布时间】:2016-03-30 11:16:23
【问题描述】:
我在数据库中有一堆字符串,不久前用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字符,从而导致数据损坏?还有其他方法可以在这两种机制之间架起一座桥梁吗?
【问题讨论】:
-
在 base 64 编码的字符串中没有
\r\n,因此您可以删除它们(这取决于编码过程,例如,可能逐字或逐行编码),请参阅tools.ietf.org/html/rfc4648#section-4 -
en.wikipedia.org/wiki/Base64: 没有
\r或\n -
您是否尝试过使用 Java 8 mime 解码器?它记录了忽略换行符。
标签: java encoding java-8 base64 sun