From 46bf44fe0304147f7eca7c89fdb0bc3437a25478 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 11 Jun 2022 11:05:50 +0200 Subject: [PATCH] Detect big endian as well --- .../main/java/eu/faircode/email/CharsetHelper.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/faircode/email/CharsetHelper.java b/app/src/main/java/eu/faircode/email/CharsetHelper.java index 932858b9bf..47008e5402 100644 --- a/app/src/main/java/eu/faircode/email/CharsetHelper.java +++ b/app/src/main/java/eu/faircode/email/CharsetHelper.java @@ -133,6 +133,7 @@ public class CharsetHelper { } static Boolean isUTF16LE(BufferedInputStream bis) throws IOException { + // https://en.wikipedia.org/wiki/Endianness byte[] bytes = new byte[64]; bis.mark(bytes.length); try { @@ -153,7 +154,15 @@ public class CharsetHelper { even++; else odd++; - return (even < 30 * count / 100 / 2 && odd > 70 * count / 100 / 2); + + int low = 30 * count / 100 / 2; + int high = 70 * count / 100 / 2; + + if (even < low && odd > high) + return true; // Little endian + if (odd < low && even > high) + return false; // Big endian + return null; // Undetermined } finally { bis.reset(); }