Estoy tratando de decodificar los datos en formato xml en bytes base64 y estoy teniendo un problema. Mi método en java que toma un String de datos y los convierte en bytes como la de abajo.

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

Que no se pudo y se dio a la excepción como la de abajo.

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)

Es el formato xml no es compatible con base64?

  • bien, ¿qué es data?
  • se ve algo como esto: <descripción de la Versión=»…..» productname=»…..» productversion=»1.0″ validvalues=»….»>1.0</Versión / >
  • Que es no una Cadena codificada en base64.
  • ¿cómo puede ser cambiado a una cadena base64? Necesito codificar?
  • Sí, por supuesto. Usted tiene algunos legible de datos como la que se muestra tan lejos, entonces usted encode a base64 que sólo le han permitido base64 caracteres, entonces usted decode que la cadena base64 en el contenido original de nuevo.
  • DataString -> encode -> Base64String -> decode -> DataString
  • algo así como: byte[] dataBytes = Base64.getEncoder().cifrar los datos.getBytes());
  • Posibles duplicados de: stackoverflow.com/questions/19743851/…
  • sí, eso es correcto.

InformationsquelleAutor VMA92 | 2017-09-15

4 Comentarios

  1. 14

    Sólo utilizar este método

    getMimeDecoder()

    String data = "......";
    byte[] dataBytes =  Base64.getMimeDecoder().decode(data);
  2. 2

    Tengo este mismo error y el problema era que la cadena estaba empezando con data:image/png;base64, ...

    La solución era:

    byte[] imgBytes = Base64.getMimeDecoder().decode(imgBase64.split(",")[1]);
    • Y esto es lo que yo hice resp = resp.replace("data:image/jpeg;base64,", "");
  3. 0

    Usted debe primero obtener los bytes de la cadena (en algunos codificación de caracteres).

    Para estos bytes se utiliza el encoder para crear el Base64 representación para que los bytes.

    Esta cadena Base64 puede decodificarse a bytes y con la misma codificación de convertir estos bytes en una cadena.

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

    La salida es:

    <root-node><sub-node/></root-node>
    PHJvb3Qtbm9kZT48c3ViLW5vZGUvPjwvcm9vdC1ub2RlPg==
    <root-node><sub-node/></root-node>
  4. -1

    Gracias a @luk2302 yo era capaz de resolver el problema. Antes de la decodificación de la cadena, necesito primera codificar en Base64

        byte[] dataBytes = Base64.getEncoder().encode(data.getBytes());
        dataBytes = Base64.getDecoder().decode(dataBytes);
    • Se acaba de codificación de texto y decodificación de inmediato? Si es así, no entiendo lo que se logra a través de este.

Dejar respuesta

Please enter your comment!
Please enter your name here