Java中Base64解码PDF为String异常:解码后PDF结构损坏
问题原因与解决方案
核心问题
PDF是二进制文件,不是纯文本内容。你用new String(...)把解码后的二进制字节转成String时,JVM会默认用平台字符编码(比如UTF-8)去解析这些字节,但PDF的二进制数据里大量字节不属于合法的UTF-8字符,会被强制替换成�这类替代字符。之后如果再把这个String转回字节写文件,这些替代字符会生成新的字节,彻底破坏原PDF的二进制结构,导致文件损坏、体积变大、打开空白。
正确处理方式
解码后直接保留字节数组,不要转成String,直接用字节数组写入文件:
// 假设encoded是你的Base64编码字符串 byte[] pdfRawBytes = Base64.getDecoder().decode(encoded); // 直接写入文件,无需转String Files.write(Paths.get("recovered.pdf"), pdfRawBytes);
关键注意事项
- 二进制文件(PDF、图片、压缩包等)必须用
byte[]或字节流处理,绝对不能用String中转,String只适合处理纯文本数据。 - 之前的操作相当于做了两次编码转换:二进制→String(破坏数据)→二进制(生成错误数据),这就是乱码和文件异常的根源。
内容的提问来源于stack exchange,提问作者Fiko
相关产品推荐
相关产品推荐

