C 和 POSIX 都只要求在 C/POSIX 语言环境中存在非常有限的一组字符,但允许存在其他字符。这给实施留下了很大的自由;例如,在 C 语言环境中支持所有 Unicode(如 UTF-8)是符合行为。然而,大多数历史实现都将 C 语言环境视为具有“8 位干净”单字节字符编码,即 ISO-8859-1(Latin-1)或一种“抽象 8 位字符集”,其中非 ASCII 字节是没有特定标识的抽象字符。(但是,在后一种情况下,如果编译器定义__STDC_ISO_10646__
,它们通常对应于 Unicode 字符,通常是 Latin-1 范围。)
另一个似乎不太受欢迎的一致选项是将所有非 ASCII 字节视为非字符,即以EILSEQ
错误响应它们。
我有兴趣知道的是在实现 C 语言环境时是否有采用此选项或任何其他不寻常选项的实现。是否存在尝试在 C 语言环境中转换“高字节”导致EILSEQ
或除将它们视为(抽象或 Latin-1)单字节字符或 UTF-8 之外的任何实现?