I am looking for a way to quoted-printable
encode a string in Java just like php\'s native quoted_printable_encode() function.
I have tried to use JavaMails
To use this MimeUtility
method you have to create a ByteArrayOutputStream
which will accumulate the bytes written to it, which you can then recover. For example, to encode the string original
:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream encodedOut = MimeUtility.encode(baos, "quoted-printable");
encodedOut.write(original.getBytes());
String encoded = baos.toString();
The encodeText function from the same class will work on strings, but it produces Q-encoding, which is similar to quoted-printable but not quite the same:
String encoded = MimeUtility.encodeText(original, null, "Q");
Thats what helps me
@Test
public void koi8r() {
String input = "=5F=F4=ED=5F15=2E05=2E";
String decode = decode(input, "KOI8-R", "quoted-printable", "KOI8-R");
Assertions.assertEquals("_ТМ_15.05.", decode);
}
public static String decode(String text, String textEncoding, String encoding, String charset) {
if (text.length() == 0) {
return text;
}
try {
byte[] asciiBytes = text.getBytes(textEncoding);
InputStream decodedStream = MimeUtility.decode(new ByteArrayInputStream(asciiBytes), encoding);
byte[] tmp = new byte[asciiBytes.length];
int n = decodedStream.read(tmp);
byte[] res = new byte[n];
System.arraycopy(tmp, 0, res, 0, n);
return new String(res, charset);
} catch (IOException | MessagingException e) {
return text;
}
}