Java-解码base64-非法的base64字符1

时间:2019-08-17 05:23:34

标签: java base64

我的文件中包含以下数据: enter image description here

我想解码UserData。在将其读取为字符串comment时,我正在执行以下操作:

String[] split = comment.split("=");
if(split[0].equals("UserData")) {
    System.out.println(split[1]);
    byte[] callidArray = Arrays.copyOf(java.util.Base64.getDecoder().decode(split[1]), 9);
    System.out.println("UserData:" + Hex.encodeHexString(callidArray).toString());
}

但是我遇到了以下异常:

  

java.lang.IllegalArgumentException:非法的base64字符1

可能是什么原因?

2 个答案:

答案 0 :(得分:2)

该图像表明您尝试解码的字符串包含SOH和BEL之类的字符。这些是ASCII控制字符,永远不会出现在Base64编码的字符串中。

(Base64通常由字母,数字和+\=组成。虽然有一些变体格式,但从不包含控制字符。)

这由异常消息确认:

  java.lang.IllegalArgumentException: Illegal base64 character 1

SOH字符具有ASCII码1。


结论:

  1. 您无法将该字符串解码为Base64。这行不通。
  2. 看上去 字符串根本没有被“编码”,这在Java中“编码”的含义是正常的。
  3. 在没有明确说明的情况下,我们无法为您提供应该使用的建议。

    • (二进制)数据的来源
    • 您希望它包含的内容,并且
    • 如何读取数据并将其转换为Java String对象:向我们展示执行此操作的代码!

答案 1 :(得分:0)

问题图片中的UserData字段实际上包含十六进制字符的字节表示形式。

因此,我不需要解码Base64。我需要将字符串复制到字节数组,并获取字节数组的等效十六进制字符。

String[] split = comment.split("=");
if(split[0].equals("UserData")) {
    System.out.println(split[1]);
    byte[] callidArray = Arrays.copyOf(split[1].getBytes(), 9);
    System.out.println("UserData:" + Hex.encodeHexString(callidArray).toString());
}

输出: UserData:010a20077100000000