【问题标题】:C++ List files with special nonstandard charactersC++ 列出具有特殊非标准字符的文件
【发布时间】:2017-05-03 05:36:54
【问题描述】:

我要递归列出给定目录的文件和子目录,到目前为止它工作正常(使用 dirent.h),但文件具有特殊字符,例如短划线或任何日文或中文字符。

完整代码在这里 https://gist.github.com/VikiMaster2/f14a19aa5cf042f0787467a37a616ded

对于名称中包含奇数字符的文件,我只会得到“?”。 我了解此类字符无法在控制台中正确显示,并且可能不支持非 ASCII 字符,但是如何存储文件的所有路径并使用它们呢?

【问题讨论】:

  • 请将完整的代码放在 gist 中,包括 main 函数。有助于减少打字工作。
  • 已记录并更新。

标签: c++ file directory dirent.h


【解决方案1】:

以下是示例输出的示例 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 字符。编写代码非常简单,我认为您将能够做到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2019-03-15
    • 2020-04-05
    • 1970-01-01
    相关资源
    最近更新 更多