2014-02-05 68 views
1

我正在尋找一種方法來quoted-printable編碼Java中的字符串,就像php的原生quoted_printable_encode()函數一樣。Java:引用可打印的編碼字符串

我試圖使用JavaMails的MimeUtility庫。但我不能讓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

對於MimeUtility.encodeText(「Hätte」,null,「Q」);輸出'=?UTF-8?Q?H = C3 = A4tte?='而不是預期的'H = C3 = A4tte'不添加換行符 - 所以它不適用於我 – Horen

+0

您是否試圖編碼一個MIME消息標題或正文? – Joni

+0

我正在嘗試對身體進行編碼 - 但我沒有對所有內容使用JavaMail。我只需要引用可打印的編碼。 – Horen