我有以下问题: 在java程序中,我将字符串编码为base64格式:
package my;
import java.util.Base64;
public class base64 {
public static void main(String[] args) {
// check for an input
if(args.length > 0)
{
Base64.Encoder encoder = java.util.Base64.getEncoder();
for(int i = 0; i< args.length; ++i)
{
String encoded = encoder.encodeToString(args[i].getBytes());
System.out.println(encoded);
}
}
}
}
字符串......
firstname lastname<$!$>email@domain.tld<$!$>message
...导致:
Zmlyc3RuYW1lIGxhc3RuYW1lPCQhJD5lbWFpbEBkb21haW4udGxkPCQhJD5tZXNzYWdl
这似乎工作正常。但是如果我想使用以下程序将这个base64-string解码回GNU Octave中的普通字符串:
b64encoded = "Zmlyc3RuYW1lIGxhc3RuYW1lPCQhJD5lbWFpbEBkb21haW4udGxkPCQhJD5tZXNzYWdl";
decoded = base64_decode(b64encoded);
%output the type and the string
disp(typeinfo(decoded));
disp(["decoded : " decoded]);
...我每次都会收到以下错误消息之一。
error: base64_decode: incorrect input size
或
error: base64_decode: input was not valid base64
由于这不起作用,我试图用Octave编码给定的字符串,但这不起作用,因为我不明白如何将字符串转换为base64_encode想要作为输入的数组类型。之后我用Google搜索了2天,阅读了很多帖子,文档并尝试了解Octaves base64_encode和base64_decode的底层c实现,但这对我没有帮助。
所以我的主要问题是:
提前致谢,
nioerd
答案 0 :(得分:1)
正如文档所示,Octave函数base64_decode
不是通用的base64解码器函数,而是一个返回编码为二进制的双精度数组的函数:
内置函数:x = base64_decode(s)
从base64编码的字符串s中解码 double 矩阵或数组x。
你可以在GNU Octave的源代码中看到相同的内容:
56 Array<double>
57 octave_base64_decode (const std::string& str)
并且&#34;不正确的输入大小&#34;错误是因为你的字符串不是double(通常是8字节)long的大小的倍数:
76 if ((outlen % (sizeof (double) / sizeof (char))) != 0)
77 {
78 ::free (out);
79 (*current_liboctave_error_handler)
80 ("base64_decode: incorrect input size");
81 }
那是你的问题1:你做错了什么,base64_decode
函数不是为了解码字符串,而是为了解码二进制双精度。
您的问题2:扩展程序包strings
提供了执行编码/解码字符串的函数base64encode
和base64decode
(没有下划线):