base64编码的字符串:可以用PHP解码但不能用Java解码?
有效的 PHP 代码:
$str = "528ABf4cCU5g7zKzLC2t8oze4mstEcWKErar6FbTK2Xo97bu17S8cDmEg5HlbgcLtfvKCVvJ4FnRV3R1iX1TWZIyM7T2352wsb6LUyqFXA03Fz9G6dQmhRrkWpOXAoHeU/H63LKKzcJDhNb3YI2hfsU20BcT0qkk74XKneC7D91OKY=";
echo strlen(base64_decode($str));
输出 130。
不起作用的 Java 代码:
String demo = "528ABf4cCU5g7zKzLC2t8oze4mstEcWKErar6FbTK2Xo97bu17S8cDmEg5HlbgcLtfvKCVvJ4FnRV3R1iX1TWZIyM7T2352wsb6LUyqFXA03Fz9G6dQmhRrkWpOXAoHeU/H63LKKzcJDhNb3YI2hfsU20BcT0qkk74XKneC7D91OKY=";
System.out.println(java.util.Base64.getDecoder().decode(demo).length);
这抛出:
“输入字节数组有错误的 4 字节结束单元”java.lang.IllegalArgumentException。
如何使 PHP 喜欢的 base64 编码字符串可被 Java 解码?
回答
该demo输入被错误地填充;它应该以==而不是=.
您可以使用更宽松的解码器,例如 Guava 的BaseEncoding.
或者,由于 Base64 中的填充是可选的,因此您可以=在使用java.util.Base64.