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+", "");