From 4219372e68206e26b2a12fbacedcd1f5e63daa5d Mon Sep 17 00:00:00 2001 From: peri4 Date: Tue, 1 Nov 2022 14:29:07 +0300 Subject: [PATCH] PIString::fromUTF8 BOM support --- libs/main/core/pistring.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/libs/main/core/pistring.cpp b/libs/main/core/pistring.cpp index 2c041a64..2810adc6 100644 --- a/libs/main/core/pistring.cpp +++ b/libs/main/core/pistring.cpp @@ -341,14 +341,31 @@ PIString PIString::fromSystem(const char * s) { PIString PIString::fromUTF8(const char * s) { PIString ret; if (!s) return ret; - if (s[0] != '\0') ret.appendFromChars(s, -1, __utf8name__); + if (s[0] != '\0') { + if ((uchar)s[0] == 0xEF && (uchar)s[1] == 0xBB && (uchar)s[2] == 0xBF) { + s += 3; + if (s[0] == '\0') return ret; + } + ret.appendFromChars(s, -1, __utf8name__); + } return ret; } PIString PIString::fromUTF8(const PIByteArray & ba) { PIString ret; - if (ba.isNotEmpty()) ret.appendFromChars((const char*)ba.data(), ba.size(), __utf8name__); + if (ba.isNotEmpty()) { + const char * data = (const char*)ba.data(); + int size = ba.size(); + if (ba.size() >= 3) { + if (ba[0] == 0xEF && ba[1] == 0xBB && ba[2] == 0xBF) { + data += 3; + size -= 3; + if (size == 0) return ret; + } + } + ret.appendFromChars(data, size, __utf8name__); + } return ret; }