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"을 활성화/비활성화 할 수 있습니까?
아니요 Java 7을 사용 중입니다. – user1316830
Java 측에서'encodeBase64'의 출력을 디코딩 해 보셨습니까? 문제가 C 응용 프로그램의 디코딩에 있을지 궁금합니다. – juh
예, 자바 측에서는 모든 것이 적절합니다. – user1316830