2017-09-15 13 views
-1

J'essaie de décoder les données au format xml en octets (base64) et j'ai des problèmes. J'ai écrit un programme en Java qui prend les données de chaîne et le convertit en octets comme ceci:Encodage Base64: caractère base64 illégal 3c

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

Cela échoue et donne-moi et exception comme ceci:

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) 

Le format XML non compatible avec base64? Il semble que le problème pourrait être causé par les crochets <> '

+0

, ce qui est 'data'? – luk2302

+0

il ressemble à ceci: 1.0 VMA92

+0

C'est ** pas ** une chaîne encodée en base64. – luk2302

Répondre

0

Grâce à @ luk2302, j'ai pu résoudre le problème. Avant de décoder la chaîne, je dois d'abord encoder à base64

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

Vous devez d'abord obtenir les octets de la chaîne (dans un codage de caractères).

Pour ces octets, vous utilisez l'encodeur pour créer la représentation Base64 pour ces octets.

Cette chaîne Base64 peut ensuite être décodée en octets et avec le même codage, vous convertissez ces octets en chaîne.

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); 
    } 

} 

sortie est:

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