Java Base64 Sun到JDK8
我在数据库中有一堆字符串,它们是不久前用Java Base64 Sun到JDK8,java,encoding,java-8,base64,sun,Java,Encoding,Java 8,Base64,Sun,我在数据库中有一堆字符串,它们是不久前用sun.misc.BASE64Encoder编码的 现在我想用java.util.Base64解码(并编码更多字符串) 这两者之间的区别在于Sun one在每n个字符处添加了一个新行字符串 例如: 为了让JDK解码器解析这些压缩字符串,我需要删除新行字符 问题: 我是否删除\r\n(Unix)或\n(Windows)或\r(旧Mac)?因为字符串取决于编码它们的机器 如果我说zippedString.replaceAll(“\r”,”).replaceAl
sun.misc.BASE64Encoder
编码的
现在我想用java.util.Base64
解码(并编码更多字符串)
这两者之间的区别在于Sun one在每n个字符处添加了一个新行字符串
例如:
为了让JDK解码器解析这些压缩字符串,我需要删除新行字符
问题:
\r\n
(Unix)或\n
(Windows)或\r
(旧Mac)?因为字符串取决于编码它们的机器zippedString.replaceAll(“\r”,”).replaceAll(“\n”,”)
如何确保实际字符串中没有导致数据损坏的\r
字符Base64中没有空格,因此我将删除all
String toDecode = str.replaceAll("\\s+", "");
这消除了关于如何处理特定换行符或空格的任何歧义。此处“\r”和“\n”字符的用途纯粹与文本格式有关,您可以假定它们是不可见的。 读取字符串值的代码应该注意将其过滤掉,无论使用什么方法,例如 读取行->修剪->连接 然后,解码连接的字符串
作为题外话,假设应用了不同的编码算法,这些字符是编码字母表的一部分。由于Java将“\r”和“\n”字符解释为新行的指示符(取决于操作系统),因此需要转义编码值的字符串表示形式,例如“14y6\\n75b…”但是,这会带来更多的问题,而不是应该避免的好处。在base 64编码字符串中没有
\r\n
,因此您可能可以删除它们(这取决于编码过程,例如,可以逐字或逐行编码),请参阅:否\r
或\n
您是否尝试过使用Java 8 mime解码器?有文件记录忽略换行符。
String toDecode = str.replaceAll("\\s+", "");