posix系统如何支持unicode?

posix系统如何支持unicode?,c,api,unicode,posix,C,Api,Unicode,Posix,我见过很多API posix系统,例如Linux、Mac和android,它们接受const char*作为文件路径的参数 例如,如文档所示,第一个参数是const char*,因此它是否支持Unicode文件路径,例如带有中文的路径?假设在现代Linux/Unix系统中,Unicode文件名以UTF-8语言环境表示,该语言环境面向字节(尽管一些底层文件系统在内部将文件名存储在UTF-16中)。假设在现代Linux/Unix系统中,unicode文件名是以面向字节的UTF-8语言环境表示的(尽管

我见过很多API posix系统,例如Linux、Mac和android,它们接受
const char*
作为文件路径的参数


例如,如文档所示,第一个参数是
const char*
,因此它是否支持Unicode文件路径,例如带有中文的路径?

假设在现代Linux/Unix系统中,Unicode文件名以UTF-8语言环境表示,该语言环境面向字节(尽管一些底层文件系统在内部将文件名存储在UTF-16中)。

假设在现代Linux/Unix系统中,unicode文件名是以面向字节的UTF-8语言环境表示的(尽管一些底层文件系统在内部将文件名存储在UTF-16中)。

POSIX不需要支持unicode文件名。(请参阅:)但是,如果它们是以UTF-8编码的,那么支持Unicode就没有技术障碍。许多现代文件系统允许文件名中包含任何字符,除了
\0
/
之外


POSIX API处理以null结尾的字节序列,当字符串以UTF-8编码时,没有代码点表示包含零字节。此外,ASCII范围(0x00-0x7f)之外的所有字符都完全使用具有高阶位集(0x80-0xff)的字节进行编码因此,系统不可能被认为是在某个Unicode字符中间有一个目录分隔符。

< P> POSIX不需要支持Unicode文件名。但是,如果它们是以UTF-8编码的,那么支持Unicode就没有技术障碍。许多现代文件系统允许文件名中包含任何字符,除了
\0
/
之外


POSIX API处理以null结尾的字节序列,当字符串以UTF-8编码时,没有代码点表示包含零字节。此外,ASCII范围(0x00-0x7f)之外的所有字符都完全使用具有高阶位集(0x80-0xff)的字节进行编码因此,系统不可能被认为是在某个Unicode字符中间有一个目录分隔符。

FY:有多个Unicode编码:UTF-8,它对于交换和UNIX系统都是首选的,UTF-16由于BaskWrad兼容约束和UTF-32而使用Windows UTF-16。它可以代表每一个Unicode代码点作为一个固定长度的单位。所有其他都只在利基应用程序中很有意思。@ De复印机,我想包装一个跨平台的Unicode API,我不想考虑性能和内存使用,因为差别会很小。所以对于生产率和易用性,任何关于PROs的想法。UTF-8或UTF-32的缺点是什么?选择所有的UTF-8,这种方式的缺点是最少的。即使在有UTF-16 API的系统上,其他一切都是在UTF-8中完成的,所以无论如何你都必须在那里转换。只要确保你总是使用本机Unicode API,也许有一个专门的加宽/缩小转换器。仅供参考:有多种Unicode编码:UTF-8,它最适合于交换和在Unix系统上进行任何操作,Windows使用UTF-16是因为baskwards的兼容性限制,UTF-32可以将每个Unicode代码点表示为一个恒定长度的单位。所有其他的都只对小应用程序感兴趣。@重复数据消除程序,我想包装一个跨平台的Unicode API,我不知道不想考虑性能和内存使用,因为差异会很小。因此,对于生产率和易用性,关于UTF-8或UTF-32的优点和缺点的任何想法?对于UTF-8来说,这是最不可能的。即使在具有UTF-16 API的系统中,所有其他事情都是在UTF-8中完成的,所以无论如何都被迫转换。请确保始终使用本机Unicode API,可能带有专门的加宽/缩小转换器。当字符串以UTF-8编码时,NUL编码为零字节。表示
UTF8 char=UTF8-1/UTF8-2/UTF8-3/UTF8-4
UTF8-1=%x00-7F
。您可能认为UTF-8类似,但它们显然不一致是的,对不起,我指的是除了NUL本身以外的所有代码点。当字符串用UTF-8编码时,NUL编码为零字节。表示
UTF8 char=UTF8-1/UTF8-2/UTF8-3/UTF8-4
UTF8-1=%x00-7F
。你可能会像UTF-8那样思考,但它们在NUL周围明显不一致。是的,s对不起,我的意思是,除了NUL本身,所有代码点都是这样。