Wie erkennt man UTF-8 in C?

Ich suche nach einem Code-Snippet in einfachem altem C, das feststellt, dass die angegebene Zeichenfolge in UTF-8-Codierung vorliegt. Ich kenne die Lösung mit Regex, aber aus verschiedenen Gründen ist es in diesem speziellen Fall besser, alles andere als einfaches C zu vermeiden.

Die Lösung mit Regex sieht so aus (Warnung: Verschiedene Checks weggelassen):

<code>#define UTF8_DETECT_REGEXP  "^([\x09\x0A\x0D\x20-\x7E]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$"

const char *error;
int         error_off;
int         rc;
int         vect[100];

utf8_re = pcre_compile(UTF8_DETECT_REGEXP, PCRE_CASELESS, &error, &error_off, NULL);
utf8_pe = pcre_study(utf8_re, 0, &error);

rc = pcre_exec(utf8_re, utf8_pe, str, len, 0, 0, vect, sizeof(vect)/sizeof(vect[0]));

if (rc > 0) {
    printf("string is in UTF8\n");
} else {
    printf("string is not in UTF8\n")
}
</code>

Antworten auf die Frage(10)

Ihre Antwort auf die Frage