Java 文件解码后PDF附件已损坏

Java 文件解码后PDF附件已损坏,java,pdf,encoding,decoding,Java,Pdf,Encoding,Decoding,在这里,我有解码邮件中所有附件的代码: for(字符串键:attachments.keySet()){ 字符串fileContent=attachments.get(key); attachments.put(key,getEncodedPartFromAttachment(fileContent)); } 私有字符串解码文件内容(字符串编码数据){ 返回新字符串(Base64.getDecoder().decode(encodedData)); } 在编码和解码之后,我遇到了一些问题,比如:

在这里,我有解码邮件中所有附件的代码:

for(字符串键:attachments.keySet()){
字符串fileContent=attachments.get(key);
attachments.put(key,getEncodedPartFromAttachment(fileContent));
}

私有字符串解码文件内容(字符串编码数据){
返回新字符串(Base64.getDecoder().decode(encodedData));
}

在编码和解码之后,我遇到了一些问题,比如:

原始PDF:

转换后的PDF:%����

原始PDF:H‰d; 1 D"2"lΧ,XØDØ›G(p)·

转换后的PDF:H�D�; 1 D�2'�Χ���@��ܿ���X�&қ�G~��P��


有没有办法在编码解码时不损坏内容?

PDF文件是二进制文件;它们尤其可以包含任意字节序列

将二进制数据强制转换为字符串:

return new String(...);
根据该转换中给定或假定的编码,这会损坏二进制PDF数据,甚至可能无法修复


因此,请将二进制附件改为二进制文件,例如作为
byte[]
或作为
ByteBuffer

PDF文件是二进制文件。将二进制数据强制转换为字符串:
新字符串(…)
。这会损坏二进制PDF数据,这取决于所使用的编码,甚至无法修复。将二进制附件改为二进制文件,例如作为
byte[]
或作为
ByteBuffer