Проблема возврата каретки, декодирование 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, и мне нужно продолжать это делать)


person angryITguy    schedule 18.02.2012    source источник
comment
Мне нужно отправить текст base64 в браузер. HTML5 на другом конце   -  person angryITguy    schedule 18.02.2012
comment
\ n не является символом возврата каретки, это перевод строки. \ r - возврат каретки. stackoverflow.com/ questions / 3091524 /   -  person Achille    schedule 28.12.2017


Ответы (1)


Я подозреваю, что кодировщик sun.misc.Base64 разбивает выходные данные. Я бы не стал использовать классы sun.misc, поскольку они ограничивают ваш код JVM Oracle (например, он будет работать в IBM Websphere). Я бы использовал общие Base64 кодировщик или Base64OutputStream .

person beny23    schedule 18.02.2012
comment
Когда вы имеете в виду разбиение на фрагменты, после каждого фрагмента ставится разделитель \ n. Значит, общий Base64 обеспечит чистое преобразование base64? - person angryITguy; 18.02.2012
comment
Классы sun.misc не существуют в JVM, отличных от Oracle, в то время как обычный Base64 работает во всех JVM. Да, разбиение на части помещает возврат каретки через каждые 76 символов. - person beny23; 18.02.2012
comment
В порядке. Просто для подтверждения, кодек commons совместим с 1.4? - person angryITguy; 19.02.2012
comment
Согласно commons.apache.org/codec, кодеки Commons 1.4 и 1.5 совместимы с JDK 1.4. - person beny23; 20.02.2012
comment
Так что, общие Base64 не вставляют \n? - person basZero; 19.03.2012
comment
Согласно документам, encodeBase64 не вставляет и encodeBase64Chunked вставляет перевод строки. - person beny23; 19.03.2012
comment
Странно, как функция по умолчанию в sun.misc.Base64Encoder будет фрагментирована. Если смотреть на это с точки зрения чистого перевода данных, он по умолчанию искажает данные. Полагаю, вывод был предназначен для терминалов VT220? - person angryITguy; 19.04.2012