2012-02-18 53 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