Как получить двухпоследовательное представление символа UTF-8 с помощью JavaMail MimeUtility или Apache Commons и цитируемой для печати? - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть строка, которая содержит немецкий символ ü.Его значение UTF равно 0xFC, но его последовательность для печати в кавычках должна быть =C3=BC вместо =FC.Однако, используя JavaMail MimeUtility, как показано ниже, я могу получить только однопоследовательное представление.

String s = "Für";
ByteArrayOutputStream baos = new ByteArrayOutputStream ();
OutputStream encodedOut = MimeUtility.encode (baos, "quoted-printable");

encodedOut.write (s.getBytes (StandardCharsets.UTF_8));
String encoded = baos.toString ();   // F=FCr

(определение StandardCharsets.US_ASCII вместо UTF_8 привело к F?r, что, очевидно, не то, чтоЯ хочу.)

Я также уже взглянул на Apache Commons 'QuotedPrintableCodec, который я использовал так:

String s = "Für";
QuotedPrintableCodec qpc = new QuotedPrintableCodec ();
String encoded = qpc.encode (s, StandardCharsets.UTF_8);

Однако это привело кв F=EF=BF=BDr, который аналогичен результату, который выдаст Java URLEncoder (% вместо = в качестве escape-символа, F%EF%BF%BDr), и который мне не понятен.

Я получаю строку из JavaMail MimeMessage, используя ByteArrayOutputStream, например, так:

ByteArrayOutputStream baos = new ByteArrayOutputStream ();
message.writeTo (baos);
String s = baos.toString ();

В начальной процедуре сохранения я получаю строку, содержащую литерал (чьи правильные кавычки -последовательность для печати, кажется, =EF=BF=BD) вместо умлаут-у.Тем не менее, при любом последующем запросе Thunderbird (например, при копировании в Sent) я получаю правильный ü.Это то, что я могу исправить?

Я хотел бы получить представление в две последовательности, как того требует IMAP и соответствующие почтовые клиенты.Как бы я поступил об этом?

...