在 Debian(以及大多数 Linux 发行版) 上,readdir 本身是支持中文文件名的,但有几个前提条件需要说明:
readdir 本身不关心“语言”readdir()(来自 <dirent.h>)返回的是 字节序列(filename 是 char *),它并不理解“中文”或“英文”,只是原样返回文件系统里存储的文件名。
也就是说:
readdir 就能正常返回中文文件名常见情况:
ext4 / xfs / btrfs:完全支持 UTF-8 文件名vfat / ntfs:
mount -o utf8,iocharset=utf8 /dev/sdb1 /mnt
常见问题不是 readdir 不支持,而是:
LANG=C)locale
应看到类似:
LANG=zh_CN.UTF-8
LC_CTYPE=UTF-8
如果不是:
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
#include <dirent.h>
#include <stdio.h>
int main() {
DIR *dir = opendir(".");
struct dirent *entry;
while ((entry = readdir(dir))) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
如果终端是 UTF-8,中文文件名会正常显示。
❌ “readdir 不支持中文”
✅ 实际是:
GBK 去解释 UTF-8✅ Debian 的 readdir 支持中文文件名
✅ 只要:
如果你有 具体场景(如 C / Python / 挂载 U 盘 / NFS),我可以给你更针对性的建议。