Base64编码和解码不能给出相同的结果

时间:2015-07-29 07:28:45

标签: java pdf base64 apache-commons-codec

这一整天我一直在撞墙。我有一个PDF文件,我们生成。 PDF文件在Acrobat中看起来很好。

我需要在base64中对文件进行编码。使用Apache编解码器库我这样做:

String base64buf = Base64.encodeBase64String( m_reportText.getBytes( "UTF-8" ) );

作为测试,我将base64buf写入文件:

Files.write( new File( "report.b64" ).toPath(), base64buf.getBytes( "UTF-8") );

然后我将其转换回来,看看它是否正常工作:

String encodedName = "report.b64";
String decodedName = "report.pdf";

// Read original file.
byte[] encodedBuffer = Files.readAllBytes( new File( encodedName ).toPath() );

// Decode
byte[] decodedBuffer = Base64.decodeBase64( encodedBuffer );

// Write out decodedBuffer.
FileOutputStream outputStream = new FileOutputStream( decodedName );
outputStream.write( decodedBuffer );
outputStream.close();

我在Acrobat中打开report.pdf,它是一个空白文档。它具有正确的页数(全部为空白)。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

m_reportText是一个字符串,因此包含Unicode文本。但是,PDF通常是二进制数据。那应该真的可以避免,因为两个方向的多余转换都是有损且容易出错的。对于hack,您可以尝试将PDF字节存储和检索为ISO-8859-1。

使用byte[] m_reportText