我以递归方式列出给定目录的文件和子目录,并且它到目前为止(使用dirent.h)但是具有特殊字符的文件,例如en dash或任何日语或者汉字。
此处为完整代码 https://gist.github.com/VikiMaster2/f14a19aa5cf042f0787467a37a616ded
对于名称中包含奇数字符的文件,我只能获得“#”。 我知道这些字符无法在控制台中正确显示,而且可能不支持非ASCII字符,但是如何将所有路径存储到文件中并将其用于呢?
答案 0 :(得分:0)
以下是示例输出的示例hexdump(使用简单命令./a.out>abcd.txt生成):
00000000 20 20 2d 20 61 2e 6f 75 74 0a 20 20 2d 20 61 62 | - a.out. - ab|
00000010 63 64 2e 74 78 74 0a 20 20 2d 20 76 69 65 77 73 |cd.txt. - views|
00000020 6f 75 72 63 65 2e 63 73 73 0a 20 20 2d 20 e0 a4 |ource.css. - ..|
00000030 b2 e0 a5 87 0a 20 20 2d 20 74 65 73 74 2e 63 0a |..... - test.c.|
,文件是:
- a.out
- abcd.txt
- viewsource.css
- ले
- test.c
现在,您可以看到非ASCII字符是多字节字符,您可以计算存储它的编码。一旦你理解了它的存储编码,就可以阅读它。
了解编码的最简单方法是执行file
命令,如:
$ file abcd.txt
abcd.txt: UTF-8 Unicode text
但是,这是重定向保存的方式。你可以用任何你想要的编码存储它,UTF-8是一个非常特别/好的选择。现在您需要处理的是UTF-8编码。有些图书馆会帮助你解决这个问题,但你总是可以尝试自己做。
编辑1:很抱歉我没有注意到你在Windows上我使用Linux进行file
命令。我不知道Windows是否有文件命令。但是您可以在代码中自己检测UTF-8字符的存在。编写代码非常简单,我认为你可以做到这一点。