2012-02-18 40 views
5

我有一个servlet已经调整大小并将图像编码为base64。我对其进行编码,这样回车问题从Java解码Base64并发送到浏览器

BufferedImage newBuf = .. a bufferedImage... 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(bufferedImage, sImgFormat, baos); 
baos.flush(); 
imageInBytes = baos.toByteArray(); 

然后我编码到这一点的base64发送到浏览器这样

sun.misc.BASE64Encoder encoder = new BASE64Encoder(); 
String sEncImage = "data:image/jpg;base64," + encoder.encodeBuffer(imageInBytes); 

浏览器将收到的编码和它的作品除了回车(“\ n“)一致地嵌入在破坏图像的字符串中。当我删除回车图像是好的。有没有一种方法来生成没有回车的编码。或者我必须在发回之前自行过滤掉它?

(我使用J2SE 1.4.2,需要继续这样做)

+0

为什么不发送字节流? – Alanmars 2012-02-18 13:08:50

+0

我需要发送base64文本到浏览器。另一端的HTML5 – giulio 2012-02-18 13:26:38

+0

\ n不是回车符,它是换行符。 \ r是回车。 https://stackoverflow.com/questions/3091524/what-are-carriage-return-linefeed-and-form-feed – Achille 2017-12-28 16:48:42

回答

4

我怀疑sun.misc.Base64encoder是分块的输出。 我不会使用sun.misc类,因为它将代码限制为Oracle JVM(例如,它可以在IBM Websphere中工作)。我会使用公共编码Base64编码器或Base64OutputStream

+0

当你的意思是“分块”时,它会在每个“块”之后加上一个“\ n”分隔符。所以Commons Base64会提供一个“纯粹的”base64转换? – giulio 2012-02-18 14:59:24

+0

sun.misc类不存在于非Oracle JVM中,而Commons Base64适用于所有JVM。是的,chunking会在每76个字符后回车。 – beny23 2012-02-18 15:47:13

+0

好的。只需确认,commons编解码器是从1.4兼容的? – giulio 2012-02-18 22:21:54