Java中的Base64 Ascii编码

Java中的Base64 Ascii编码,java,base64,ascii,Java,Base64,Ascii,我需要在Java和C应用程序之间传输数据 使用org.apache.commons.codec.Binary.Base64Base64.encodeBase64(binaryData)编码的二进制数据未在“C”应用程序中正确解码 我想我需要使用“ASCII”模式进行编码 那么如何在Java中对二进制数据进行Base64 ASCII编码呢?如果您可以选择使用JDK 8,请查看嵌套类 Base64.getEncoder()将返回一个Base64.Encoder是ASCII编码。使用Base64算法编

我需要在Java和C应用程序之间传输数据

使用org.apache.commons.codec.Binary.Base64Base64.encodeBase64(binaryData)编码的二进制数据未在“C”应用程序中正确解码

我想我需要使用“ASCII”模式进行编码


那么如何在Java中对二进制数据进行Base64 ASCII编码呢?

如果您可以选择使用JDK 8,请查看嵌套类

Base64.getEncoder()
将返回一个
Base64.Encoder
是ASCII编码。使用Base64算法编码二进制数据时,输出为ASCII字节。这就是Base64的主要目的。下面是一些代码来证明这一点:

import javax.xml.bind.DatatypeConverter;
import java.nio.charset.Charset;
import org.apache.commons.codec.binary.Base64;

public class Main {
    public static void main(String[] args) {
        String s = "我愛我的狗.";
        byte[] base64Encoded = Base64.encodeBase64(s.getBytes());
        Charset ascii = Charset.forName("US-ASCII");
        String asciiEncoded = new String(base64Encoded, ascii);

        System.out.println(DatatypeConverter.printHexBinary(base64Encoded));
        System.out.println(DatatypeConverter.printHexBinary(asciiEncoded.getBytes()));
    }
}
您使用的Apache Base64编码器是可靠的。您使用的C解码器是什么?如何将数据从Java传输到C?你确定你正在C端“接收”相同的字节吗

一个可能的问题是,您正在使用不同版本的Base64编码算法对字节进行编码/解码。Base64有许多变体。例如,见


您是否可能在一个或另一个编码器/解码器中启用/禁用了“”。

base64有几种不同的变体;你可能会遇到两个不相容的

主要区别在于编码集的“最后两个”字符和行长度限制

java.util.Base64允许您在三种不同的变体之间进行选择


如果有选择,我建议大家使用官方RFC 4648第4节编码

您是否尝试过在Java端解码
encodeBase64
的输出?我想知道问题是否出在C应用程序的解码上。是的,在java端,一切都是正确的。