gpt4 book ai didi

java - base64解码后的文件不等于原始未编码文件

转载 作者:行者123 更新时间:2023-11-30 09:41:28 25 4
gpt4 key购买 nike

我有一个普通的 pdf 文件 A.pdf ,第三方在 base64 中对该文件进行编码,并将其作为长字符串通过网络服务发送给我(我无法控制第三方)。

我的问题是,当我用 java org.apache.commons.codec.binary.Base64 解码字符串并将输出右移到名为 B.pdf 的文件时我希望 B.pdf 与 A.pdf 相同,但结果 B.pdf 与 A.pdf 略有不同。因此,acrobat 无法将 B.pdf 识别为有效的 pdf。

base64是否有不同类型的编码\字符集机制?我可以检测我收到的字符串是如何编码的,以便 B.pdf=A.pdf 吗?

编辑-这是我要解码的文件,解码后它应该以 pdf 格式打开

my encoded file


这是用notepad++打开的文件头

**A.pdf**
%PDF-1.4
%±²³´
%Created by Wnv/EP PDF Tools v6.1
1 0 obj
<<
/PageMode /UseNone
/ViewerPreferences 2 0 R
/Type /Catalog

**B.pdf**
%PDF-1.4
%±²³´
%Created by Wnv/EP PDF Tools v6.1
1 0! bj
<<
/PageMode /UseNone
/ViewerPreferences 2 0 R
/]
pe /Catalog

这就是我解码字符串的方式

private static void decodeStringToFile(String encodedInputStr,
String outputFileName) throws IOException {
BufferedReader in = null;
BufferedOutputStream out = null;
try {
in = new BufferedReader(new StringReader(encodedInputStr));
out = new BufferedOutputStream(new FileOutputStream(outputFileName));
decodeStream(in, out);
out.flush();
} finally {
if (in != null)
in.close();
if (out != null)
out.close();
}
}

private static void decodeStream(BufferedReader in, OutputStream out)
throws IOException {
while (true) {
String s = in.readLine();
if (s == null)
break;
//System.out.println(s);
byte[] buf = Base64.decodeBase64(s);
out.write(buf);
}

}

最佳答案

  1. 您正在通过逐行工作来破坏您的解码。 Base64解码器简单地忽略空格,这意味着原始内容中的一个字节很可能被分成两个 Base64 文本行。您应该将所有行连接在一起并一次性解码文件。

  2. 在向 Base64 类方法提供内容时,优先使用 byte[] 而不是 StringString 表示字符集编码,这可能不是您想要的。

关于java - base64解码后的文件不等于原始未编码文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8991071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com