您尚未登录。

楼主 #1 2020-09-15 16:03:32

john78
会员
注册时间: 2018-07-19
已发帖子: 222
积分: 160

用 opendir -> readdir -> closedir 方式遍历文件中文文件名问题

Linux version 4.13.16-licheepi-zero+
struct dirent中d_name读到的中文被 ‘?’ 替换,无法转成UTF8 不能正常显示

离线

#2 2020-09-15 16:07:31

拉轰的脚踏车
会员
注册时间: 2020-03-20
已发帖子: 288
积分: 222

Re: 用 opendir -> readdir -> closedir 方式遍历文件中文文件名问题

https://stackoverflow.com/questions/12011510/in-the-struct-dirent-can-file-names-have-nonstandard-characters

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

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

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










从上面看, 应该需要你自己解析这个 d_name, 转码成utf-8才行, iconv 了解一下。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn