2017-09-15 948 views
-1

我想解碼xml格式的數據到字節(base64),我有問題。我寫的Java程序,需要一個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

它看起來像這樣: 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>