C и POSIX требуют наличия только очень ограниченного набора символов в локали C/POSIX, но допускают существование дополнительных символов. Это оставляет большую свободу для реализации; например, поддержка всех Unicode (как UTF-8) в локали C соответствует поведению. Однако большинство исторических реализаций относятся к языку C как к 8-битовому чистому однобайтовому кодированию символов: ISO-8859-1 (Latin-1) или своего рода "абстрактному 8-битовому набору символов", где байты без ASCII являются абстрактными символами без определенного идентификатора. (Однако в последнем случае, если компилятор определяет __STDC_ISO_10646__
, они нормативно соответствуют символам Unicode, обычно диапазону Latin-1.)
Другим подходящим вариантом, который кажется гораздо менее популярным, является обработка всех байтов без ASCII как несимвольных, то есть ответ на них с ошибкой EILSEQ
.
Мне интересно знать, существуют ли реализации, которые используют этот или любые другие необычные варианты реализации языковой версии C. Существуют ли реализации, в которых попытка конвертировать "высокие байты" в локаль C приводит к EILSEQ
или к чему-то другому, кроме как обрабатывать их как (абстрактные или латинские-1) однобайтовые символы или UTF-8?