2017-09-15 3 views
-1

XML 형식의 데이터를 바이트 (base64)로 디코딩하려고하는데 문제가 있습니다. 나는 String 데이터를 받아 다음과 같이 바이트로 변환 자바에서 프로그램을 작성 :Base64 인코딩 : 잘못된 base64 문자 3c

String data = "......"; //string of data in xml format 
byte[] dataBytes = Base64.getDecoder().decode(data); 

이 실패하고 다음과 같이 나와 예외를 제공합니다 :

java.lang.IllegalArgumentException: Illegal base64 character 3c 
    at java.util.Base64$Decoder.decode0(Base64.java:714) 
    at java.util.Base64$Decoder.decode(Base64.java:526) 
    at java.util.Base64$Decoder.decode(Base64.java:549) 
    at XmlReader.main(XmlReader.java:61) 

이 사용하는 XML 형식 호환되지 않습니다 base64? 꺽쇠 괄호 '<>'

+0

,'data'은 무엇인가? – luk2302

+0

다음과 같이 표시됩니다. <버전 설명 = "....."productname = "....."productversion = "1.0"validvalues ​​= "...."> 1.0 – VMA92

+0

** ** ** base64로 인코딩 된 문자열이 아닙니다. – luk2302

답변

0

덕분에 문제가 발생한 것 같습니다. @ luk2302 덕분에 문제를 해결할 수있었습니다. 문자열을 디코딩하기 전에 먼저 Base64로 인코딩해야합니다.

byte[] dataBytes = Base64.getEncoder().encode(data.getBytes()); 
    dataBytes = Base64.getDecoder().decode(dataBytes); 
0

먼저 문자열에서 일부 문자 인코딩으로 바이트를 가져와야합니다.

이 바이트의 경우 엔코더를 사용하여 해당 바이트의 Base64 표현을 만듭니다.

이 Base64 문자열을 다시 바이트로 디코딩 할 수 있으며 동일한 인코딩으로이 바이트를 문자열로 변환 할 수 있습니다.

import java.nio.charset.StandardCharsets; 
import java.util.Base64; 

public class Base64Example { 

    public static void main(String[] args) { 
    final String xml = "<root-node><sub-node/></root-node>"; 
    final byte[] xmlBytes = xml.getBytes(StandardCharsets.UTF_8); 
    final String xmlBase64 = Base64.getEncoder().encodeToString(xmlBytes); 
    System.out.println(xml); 
    System.out.println(xmlBase64); 

    final byte[] xmlBytesDecoded = Base64.getDecoder().decode(xmlBase64); 
    final String xmlDecoded = new String(xmlBytesDecoded, StandardCharsets.UTF_8); 
    System.out.println(xmlDecoded); 
    } 

} 

출력은 다음과 같습니다 잘

<root-node><sub-node/></root-node> 
PHJvb3Qtbm9kZT48c3ViLW5vZGUvPjwvcm9vdC1ub2RlPg== 
<root-node><sub-node/></root-node>