【问题标题】:Decoding and Encoding using BASE64 in java在java中使用BASE64进行解码和编码
【发布时间】:2014-12-20 12:59:07
【问题描述】:

我在尝试对从磁盘上的文件读取的字符串进行编码和解码时遇到错误的结果。

我正在使用以下代码解码然后编码:

byte[] word_bytes = new BASE64Decoder().decodeBuffer(word); //word is string variable

String tempStr = new BASE64Encoder().encode(word_bytes);

根据这段代码,我期望如果我打印“word”和“tempStr”,我应该会看到相同的结果。但是,价值观不同。

例如,如果 word = "hi!",则 tempStr = "hi//" 并且所有单字母单词都将转换为空值。例如,如果 word = "a",则 tempStr = ""。

磁盘上的文件采用UTF-8 编码。

如果有人能解释这个错误的原因,那将是非常有帮助的。

对不起,如果这是一个非常基本的问题,我在编码格式方面没有太多经验。

谢谢

【问题讨论】:

    标签: java encoding


    【解决方案1】:

    你的编码/解码是向后的

    Base64 是一种将字节数组转换为字符串的方法,可以轻松传递而不会弄乱字节编码。

    因此,您将一个字节数组编码为一个字符串,然后将其解码返回一个字节数组

    如果你切换编码和解码的顺序

         String tempStr = new BASE64Encoder().encode("hi".getBytes());
    
         byte[] word_bytes = new BASE64Decoder().decodeBuffer(tempStr);
    
         System.out.println(tempStr);
         System.out.println(new String(word_bytes));
    

    它会打印这个:

    aGk=
    hi
    

    您似乎也在使用sun Base64 类,这不是一个好主意。这些是内部类,不能保证它们会出现在未来的 Java 版本中,或者它们会出现在所有 Java 实现中。

    如果您使用的是 Java 8,则可以使用新的 java.util.Base64javadoc here,如果您使用的是 Java 8 之前的版本,则应使用具有 Base64 类的第 3 方库。

    【讨论】:

    • hi.getBytes()new String(word_bytes) 实际上应该是 hi.getBytes("utf-8")new String(word_bytes, "utf-8")(或选择其他编码)。否则行为取决于系统的默认字符编码。
    • 感谢 dkatzel!了解这个问题,它对我来说工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2015-07-14
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多