我正在尝试读取图像并使用 Base64 编码将其转换为字节数组,然后转换为字符串以通过网络发送。问题是,当我尝试解码 Base64 编码的字符串时,我得到的数据不正确。
例如。我面临以下特殊字符的问题。
我使用以下代码进行编码:
byte[] b = Base64.encodeBase64(IOUtils.toByteArray(loInputStream));
String ab = new String(b);
IOUtils
是 org.apache.commons.io.IOUtils
。
和lo输入
解码代码:
byte[] c = Base64.decodeBase64(ab.getBytes());
String ca = new String(c);
System.out.println(ca);
它会打印 ?
来获取解码后的字符串。
任何人都可以让我知道这个问题吗?
最佳答案
如果您的输入是图像,则将其编码为 base64 是有意义的 - base64 是文本,可以用字符串表示。
再次解码,你会得到原始图像。图像通常是二进制格式;尝试将其转换为字符串是没有意义的 - 它不是文本。
即最后两行:
String ca = new String(c);
System.out.println(ca);
这样做根本没有意义。
如果您想检查解码是否产生与原始输入相同的输出,请执行以下操作
System.out.println("Original and decoded are the same: " + Arrays.equals(b,c));
(或者将字节数组保存到文件中并在图像查看器中查看图像)
关于java - Base64 编码/解码问题 : decoded string is '?' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6484369/