diff --git a/app/src/main/java/com/sun/mail/imap/protocol/BODYSTRUCTURE.java b/app/src/main/java/com/sun/mail/imap/protocol/BODYSTRUCTURE.java index 279582c4da..f20da79d3a 100644 --- a/app/src/main/java/com/sun/mail/imap/protocol/BODYSTRUCTURE.java +++ b/app/src/main/java/com/sun/mail/imap/protocol/BODYSTRUCTURE.java @@ -420,6 +420,19 @@ public class BODYSTRUCTURE implements Item { ", applying Exchange bug workaround"); value = ""; } + + try { + if (!r.supportsUtf8() && + ("name".equalsIgnoreCase(name) || "filename".equalsIgnoreCase(name)) && + !java.nio.charset.StandardCharsets.US_ASCII.newEncoder().canEncode(value)) { + byte[] octets = com.sun.mail.util.ASCIIUtility.getBytes(value); + if (eu.faircode.email.CharsetHelper.isUTF8(octets)) + value = new String(octets, java.nio.charset.StandardCharsets.UTF_8); + } + } catch (Throwable ex) { + eu.faircode.email.Log.e(ex); + } + list.set(name, value); } while (!r.isNextNonSpace(')')); list.combineSegments(); diff --git a/app/src/main/java/eu/faircode/email/CharsetHelper.java b/app/src/main/java/eu/faircode/email/CharsetHelper.java index 3fae8ce68e..b34ed612ac 100644 --- a/app/src/main/java/eu/faircode/email/CharsetHelper.java +++ b/app/src/main/java/eu/faircode/email/CharsetHelper.java @@ -92,7 +92,7 @@ public class CharsetHelper { } } - static boolean isUTF8(byte[] octets) { + public static boolean isUTF8(byte[] octets) { return isValid(octets, StandardCharsets.UTF_8); }