我想解码用户数据。将其作为字符串 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: Illegal base64 character 1
可能是什么原因?
最佳答案
该图像表明您尝试解码的字符串包含 SOH 和 BEL 等字符。这些是 ASCII 控制字符,永远不会出现在 Base64 编码的字符串中。
(Base64 通常由字母、数字、+
、\
和 =
组成。有一些变体格式,但控制字符是从未包含在内。)
这由异常消息确认:
java.lang.IllegalArgumentException: Illegal base64 character 1
SOH 字符的 ASCII 代码为 1。
<小时/>结论:
- 您无法将该字符串像 Base64 一样进行解码。这是行不通的。
- 它看起来字符串根本没有“编码”......在Java中“编码”的正常意义上。
如果没有明确说明以下内容,我们无法就您应该如何使用它提供建议:
- (二进制)数据来自哪里,
- 您期望其中包含的内容,以及
- 如何读取数据并将其转换为 Java
String
对象:向我们展示执行此操作的代码!
关于Java - 解码base64 - 非法base64字符1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57533499/