java - Base64 编码/解码问题 : decoded string is '?'

标签 java base64 java-io

我正在尝试读取图像并使用 Base64 编码将其转换为字节数组,然后转换为字符串以通过网络发送。问题是,当我尝试解码 Base64 编码的字符串时,我得到的数据不正确。

例如。我面临以下特殊字符的问题。

我使用以下代码进行编码:

byte[] b = Base64.encodeBase64(IOUtils.toByteArray(loInputStream));
String ab = new String(b);

IOUtilsorg.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/

相关文章:

java - 删除之前的 XML 文件,直到使用 Java 生成新文件

java - 通过更新变量更改 LiveData 源

java - SimpleMessageListener 与 DirectMessageListener

java - 从不同线程的多个任务中检索数据

node.js - 如何使用 NodeJS、Nginx 和 base64 上传图像? (413有效负载太大错误: request entity too large)

java - 在Java中解码Base64数据

java - 迭代两个数组,遇到索引问题

image - 在 Golang 中比较 base64 图像字符串

java nio - Paths.get() 如何查找项目根目录中的文件夹?

java - 为什么是字符流?