From 38178bae07e2cc6a9bcb31f20359d7aae4e6a5bf Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 9 Jan 2022 19:37:13 +0100 Subject: [PATCH] is UTF8 / alt --- .../java/eu/faircode/email/CharsetHelper.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/CharsetHelper.java b/app/src/main/java/eu/faircode/email/CharsetHelper.java index 7724ffcab6..63eeb689dc 100644 --- a/app/src/main/java/eu/faircode/email/CharsetHelper.java +++ b/app/src/main/java/eu/faircode/email/CharsetHelper.java @@ -79,6 +79,36 @@ public class CharsetHelper { } } + static boolean isUTF8Alt(String text) { + byte[] octets = text.getBytes(StandardCharsets.ISO_8859_1); + + int bytes; + for (int i = 0; i < octets.length; i++) { + if ((octets[i] & 0b10000000) == 0b00000000) + bytes = 1; + else if ((octets[i] & 0b11100000) == 0b11000000) + bytes = 2; + else if ((octets[i] & 0b11110000) == 0b11100000) + bytes = 3; + else if ((octets[i] & 0b11111000) == 0b11110000) + bytes = 4; + else if ((octets[i] & 0b11111100) == 0b11111000) + bytes = 5; + else if ((octets[i] & 0b11111110) == 0b11111100) + bytes = 6; + else + return false; + + if (i + bytes > octets.length) + return false; + + while (--bytes > 0) + if ((octets[++i] & 0b11000000) != 0b10000000) + return false; + } + return true; + } + static String utf8toW1252(String text) { try { Charset w1252 = Charset.forName("windows-1252");