在struct dirent
成员中可以d_name
有 unicode 但不是 ascii 的字符吗?我测试过,它适用于“é”,但我不确定这是否是因为“é”在 ascii 中。什么类型d_name
,如果是,char
那么我被箍住了,但如果是wchar_t
我就得救了。
问问题
665 次
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,因此我认为char
dirent 中的数组应该包含 UTF-8 字符串(无论您的语言环境如何)。
NTFS 也以 UTF-16 存储文件名,但它们的公开方式取决于平台。Windows 在系统区域设置和 UTF-16 之间进行转换。另一个平台可能会在 UTF-16 和 UTF-8 之间进行转换。另一个平台可以在 UTF-16 和直接环境的语言环境之间进行转换。
其他文件系统只是将文件名存储和公开为字节数组,因此 dirent 将包含最初存储的任何数据。这通常是语言环境编码中的字符串,但不能保证。
于 2012-08-17T19:51:02.863 回答