@@ -135,10 +135,15 @@ size_t len; [self freeMemory: string]; len = strlen(str); + + if (len >= 3 && !memcmp(str, "\xEF\xBB\xBF", 3)) { + str += 3; + len -= 3; + } switch (of_string_check_utf8(str, len)) { case 0: isUTF8 = NO; break; @@ -161,10 +166,15 @@ - (void)appendCString: (const char*)str { size_t strlength; strlength = strlen(str); + + if (strlength >= 3 && !memcmp(str, "\xEF\xBB\xBF", 3)) { + str += 3; + strlength -= 3; + } switch (of_string_check_utf8(str, strlength)) { case 1: isUTF8 = YES; break; @@ -179,10 +189,15 @@ } - (void)appendCString: (const char*)str withLength: (size_t)len { + if (len >= 3 && !memcmp(str, "\xEF\xBB\xBF", 3)) { + str += 3; + len -= 3; + } + switch (of_string_check_utf8(str, len)) { case 1: isUTF8 = YES; break; case -1: