2014-02-05 72 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