В C 0 байт является ограничителем строки. Пока точка Unicode 0, U + 0000 отсутствует в строке Unicode, проблем нет.
Чтобы иметь возможность хранить 0 байтов в Unicode, можно использовать модифицированный UTF-8 которые преобразуют не только кодовые точки> = 128, но также и 0 в многобайтовую последовательность (для каждого ее байта установлен старший бит>> = 128). Это делается в java для некоторых API, таких как DataOutputStream.writeUTF. Он гарантирует, что вы можете передавать строки со встроенным 0.
Формально он больше не является UTF-8, поскольку UTF-8 требует кодировки кратчайшие . Также это возможно только при определении длины io strlen при распаковке в не-UTF-8.
Таким образом, наиболее выполнимое решение - не принимать U + 0000 в строках.