2014-10-06 89 views
0

我需要在Java和C應用程序之間傳輸數據。Base64在Java中的Ascii編碼

使用org.apache.commons.codec.binary.Base64Base64.encodeBase64(binaryData)編碼的二進制數據在「C」應用程序中得不到正確解碼。

我想我需要使用「ASCII」模式進行編碼。

那麼如何在Java中使用Base64 ASCII編碼二進制數據?

回答

0

如果使用JDK 8是一個選項,請檢查java.util.Base64和嵌套類java.util.Base64.Encoder

Base64.getEncoder()將返回給您一個Base64.Encoder

+0

不,我是uisng Java 7 – user1316830 2014-10-06 17:38:19

+0

您是否嘗試過在Java端解碼'encodeBase64'的輸出?我想知道這個問題是否可能出現在C應用程序的解碼中。 – juh 2014-10-06 17:54:11

+0

是的,在Java方面,一切都是正確的。 – user1316830 2014-10-07 13:07:57

2

Base64 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有許多變種。例如,請參閱this article

是否有可能在一個或其他編碼器/解碼器中啓用/禁用「safe URL encoding」?