在struct dirent
中,成员d_name
的字符是unicode但不是ascii吗?我测试过,它与'é'一起使用,但我不确定是不是因为'é'在ascii中。什么类型是d_name
,如果它是char
那么我就会被哄骗但是如果它是wchar_t
我就会被保存。
答案 0 :(得分:1)
开放组基本规范声明struct dirent
应具有以下未指定大小的成员:
char d_name[];
在符合实现的情况下,它的类型为char[]
,但这并不一定意味着它不能存储Unicode字符;规范不要求支持多个字符集(或者可移植字符集之外的字符),但它也不要禁止它(顺便说一句'é'
,不是ASCII)。
实际上,支持的字符集取决于您的语言环境。在C语言中,d_name
中的字符串存储为“多字节”字符。
答案 1 :(得分:0)
这取决于您的平台和文件系统。例如,HFS +文件系统使用UTF-16在内部存储文件名,并将它们公开为UTF-8,因此我认为dirent中的char
数组应包含UTF-8字符串(无论您的语言环境如何)。
NTFS也以UTF-16存储文件名,但它们所公开的内容取决于平台。 Windows在系统区域设置和UTF-16之间进行转换。另一个平台可以在UTF-16和UTF-8之间进行转换。另一个平台可以在UTF-16和直接环境的区域设置之间进行转换。
其他文件系统只是将文件名存储和公开为字节数组,因此dirent将包含最初存储的数据。这通常是语言环境编码中的字符串,但不能保证。