我想解码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
可能是什么原因?
答案 0 :(得分:2)
该图像表明您尝试解码的字符串包含SOH和BEL之类的字符。这些是ASCII控制字符,永远不会出现在Base64编码的字符串中。
(Base64通常由字母,数字和+
,\
和=
组成。虽然有一些变体格式,但从不包含控制字符。)
这由异常消息确认:
java.lang.IllegalArgumentException: Illegal base64 character 1
SOH字符具有ASCII码1。
结论:
在没有明确说明的情况下,我们无法为您提供应该使用的建议。
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