UTF-8 is compatible with char * because the codes between 0 and 127 are the same (in code and size). This is different from 16 bit Unicode. So, many functions that are intended for ANSI will work with UTF-8. It is now a question of OS support.
See the following program:
#include <stdio.h>
#include <windows.h>
void main() {
char * m="Конференция u Čačku Οὐχὶ ταὐτὰ παρίσταταί \n";
// SetConsoleOutputCP(65001);
printf(m);
}
Compile it and start it under Windows (I tried Windows 10) . The text is incorrectly written. Now uncomment the line SetConsoleOutputCP(65001);
and you will see the text..
However, strlen still returns string length in bytes, not in characters. Also m[5] accesses fifth byte, not fifth character. So, you need to prepare your own versions of string handling functions.