2014-02-05 2 views
1

Я ищу способ для quoted-printable кодировать строку на Java, точно так же, как и встроенная функция php quoted_printable_encode().Java: Encode String в quoted-printable

Я попытался использовать библиотеку MimeUtility JavaMails. Но я не могу заставить метод encode(java.io.OutputStream os, java.lang.String encoding) работать, поскольку он принимает OutputStream в качестве входных данных вместо String (я использовал функцию getBytes() для преобразования String) и выводит то, что я не могу вернуть к String (я Java noob :)

Может ли кто-нибудь дать мне советы о том, как написать оболочку, которая преобразует строку в OutputStream и выводит результат в виде строки после ее кодировки?

+0

Вы можете использовать [ ByteArrayOutputStream] (http://docs.oracle.com/javase/7/docs/api/index.html?java/io/InputStream.html), чтобы получить данные в памяти. – PeterMmm

ответ

4

Для использования этого метода MimeUtility вам необходимо создать ByteArrayOutputStream, который будет накапливать записанные на нем байты, которые вы затем сможете восстановить. Например, для кодирования строки original:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
OutputStream encodedOut = MimeUtility.encode(baos, "quoted-printable"); 
encodedOut.write(original.getBytes()); 
String encoded = baos.toString(); 

encodeText функция из того же класса будет работать над строками, но она производит Q-кодирование, которое similar to quoted-printable but not quite the same:

String encoded = MimeUtility.encodeText(original, null, "Q"); 
+0

Это выводит '=? UTF-8? Q? H = C3 = A4tte? =' Вместо ожидаемого 'H = C3 = A4tte' для' MimeUtility.encodeText («Hätte», null, «Q»); 'и не добавляет разрывов строк - поэтому он не работает для меня – Horen

+0

Вы пытаетесь кодировать заголовок или тело сообщения mime? – Joni

+0

Я пытаюсь закодировать тело - но я не использую JavaMail для всего. Мне просто нужна кодировка с кавычками. – Horen