2012-07-18 4 views
43

간단한 Base64 문자열을 디코딩하려하지만 그렇게 할 수 없습니다. 현재 org.apache.commons.codec.binary.Base64 패키지를 사용하고 있습니다.Java에서 Base64 문자열 디코딩

사용하고있는 테스트 문자열은 abcdefg이며 PHP YWJjZGVmZw==을 사용하여 인코딩되었습니다.

내가 현재 사용하고 코드입니다 :

Base64 decoder = new Base64(); 
byte[] decodedBytes = decoder.decode("YWJjZGVmZw=="); 
System.out.println(new String(decodedBytes) + "\n") ; 

위의 코드는 오류가 발생하지 않지만, 대신 예상대로 출력 디코딩 된 문자열은하지 않습니다.

+0

아니라 인코딩 , 무엇보다도 먼저, 당신은 항상 "당신을 위해, 예를 들어 문자열 ('새로운 String (decodedBytes을 아마도"US-ASCII의 "문자 집합을 지정해야합니다 US-ASCII ")'). – jtahlborn

+0

@jtahlborn 아파치 커먼즈 코덱은 시스템 기본 인코딩에서 "그냥 작동"하도록 특별히 지정하지 않으면 – Affe

+0

@TomasB 코드가 게시되었습니다. 전체 샘플이 저에게 잘 작동합니까? – Affe

답변

49

사용하고있는 패키지 수정 같이 사용 후

import org.apache.commons.codec.binary.Base64; 

을 그리고 :

byte[] decoded = Base64.decodeBase64("YWJjZGVmZw=="); 
System.out.println(new String(decoded, "UTF-8") + "\n"); 
+0

sun. * 패키지에주의하십시오. http://stackoverflow.com/questions/469695/decode-base64-data-in-java –

+0

죄송합니다. org.apache.commons.codec.binary.Base64를 사용해야한다고 지정해야합니다. – TomasB

+3

JDK에는 javax.xml.bind.DatatypeConverter.parseBase64Binary가 있으므로 base64로 작업하기 위해 sun API 나 외부 라이브러리를 사용할 필요가 없습니다. – vbezhenar

1

은 일반적으로는 이미지에 사용되는 BASE64. 당신은 (org.apache.commons.codec.binary.Base64 패키지이 예에서는 JPG) 이미지를 디코딩 좋아하는 경우 :

byte[] decoded = Base64.decodeBase64(imageJpgInBase64); 
FileOutputStream fos = null; 
fos = new FileOutputStream("C:\\output\\image.jpg"); 
fos.write(decoded); 
fos.close(); 
+2

Base64는 byte [] 인코딩 사양이며 특별히 이미지와 관련이 없으며 그러한 공통점도 없습니다. –

+2

이미지의 기본 64 인코딩은 이전 버전 또는 덜 정교한 메시징 프로토콜에서 일반적입니다. –

1

아파치 일반적인 코덱 최신 버전의 다음과 같은 작업을해야

byte[] decodedBytes = Base64.getDecoder().decode("YWJjZGVmZw=="); 
System.out.println(new String(decodedBytes)); 
문자 바이트로 변환 할 때

byte[] encodedBytes = Base64.getEncoder().encode(decodedBytes); 
System.out.println(new String(encodedBytes)); 
관련 문제