it-roy-ru.com

Кодировка Base64: недопустимый символ base64 3c

Я пытаюсь декодировать данные в формате xml в байты (base64), и у меня возникают проблемы. Я написал программу на Java, которая берет данные String и преобразует их в байты следующим образом:

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? Кажется, что проблема может быть вызвана угловыми скобками '<>'

2
VMA92

Благодаря @ luk2302 мне удалось решить проблему. Прежде чем декодировать строку, мне нужно сначала закодировать ее в Base64

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

Просто используйте этот метод

getMimeDecoder () 

String data = "......";
byte[] dataBytes =  Base64.getMimeDecoder().decode(data);
8
Moddasir Khan

Сначала вы должны извлечь байты из строки (в некоторой кодировке символов).

Для этих байтов вы используете кодер для создания представления 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>
0
vanje

Я получил эту же ошибку, и проблема была в том, что строка начиналась с data:image/png;base64, ...

Решение было:

byte[] imgBytes = Base64.getMimeDecoder().decode(imgBase64.split(",")[1]);
0
André Pacheco