0

struct dirent成员中可以d_name有 unicode 但不是 ascii 的字符吗?我测试过,它适用于“é”,但我不确定这是否是因为“é”在 ascii 中。什么类型d_name,如果是,char那么我被箍住了,但如果是wchar_t我就得救了。

4

2 回答 2

1

开放组基本规范规定struct dirent应具有以下未指定大小的成员:

char d_name[];

在符合规范的实现中,它是类型char[],但这并不一定意味着它不能存储 Unicode 字符;该规范不需要支持多个字符集(或可移植字符集之外的字符),但它也没有禁止它('é'顺便说一句,不是 ASCII)。

实际上,支持的字符集取决于您的语言环境。在 C 语言中,字符串 ind_name存储为“多字节”字符。

于 2012-08-17T19:15:50.250 回答
0

这取决于您的平台和文件系统。例如,HFS+ 文件系统使用 UTF-16 在内部存储文件名并将它们公开为 UTF-8,因此我认为chardirent 中的数组应该包含 UTF-8 字符串(无论您的语言环境如何)。

NTFS 也以 UTF-16 存储文件名,但它们的公开方式取决于平台。Windows 在系统区域设置和 UTF-16 之间进行转换。另一个平台可能会在 UTF-16 和 UTF-8 之间进行转换。另一个平台可以在 UTF-16 和直接环境的语言环境之间进行转换。

其他文件系统只是将文件名存储和公开为字节数组,因此 dirent 将包含最初存储的任何数据。这通常是语言环境编码中的字符串,但不能保证。

于 2012-08-17T19:51:02.863 回答