C ++列出具有特殊非标准字符的文件

时间:2016-12-17 17:13:15

标签: c++ file directory dirent.h

我以递归方式列出给定目录的文件和子目录,并且它到目前为止(使用dirent.h)但是具有特殊字符的文件,例如en dash或任何日语或者汉字。

  

此处为完整代码   https://gist.github.com/VikiMaster2/f14a19aa5cf042f0787467a37a616ded

对于名称中包含奇数字符的文件,我只能获得“#”。 我知道这些字符无法在控制台中正确显示,而且可能不支持非ASCII字符,但是如何将所有路径存储到文件中并将其用于呢?

Demo picture

1 个答案:

答案 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字符的存在。编写代码非常简单,我认为你可以做到这一点。