У меня есть строка, которая содержит немецкий символ ü
.Его значение 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 и соответствующие почтовые клиенты.Как бы я поступил об этом?