gpt4 book ai didi

qt - QDir 和 QDirIterator 忽略具有非 ASCII 文件名的文件

转载 作者:行者123 更新时间:2023-12-03 23:27:23 25 4
gpt4 key购买 nike

以下代码以某种方式未能注意到名称中包含非 ASCII 字符(特别是西里尔字符)的任何文件:

for (int path = 1; path < argc; path++) {
QFileInfo fi(argv[path]);
if (fi.isDir()) {
QDir dir(argv[path], "", QDir::LocaleAware, QDir::AllEntries);
qDebug() << dir.entryList();
QDirIterator it(QString(argv[path]), QDirIterator::Subdirectories);
while (it.hasNext()) {
it.next();
qDebug() << it.fileInfo().absoluteFilePath();
/* Processing; irrelevant in the context of the question */
}
}
}

我到底做错了什么?我应该如何处理 QDir 和 QDirIterator 让它们知道西里尔文件名?

系统区域设置为 en_US.UTF-8

更新:在 Windows 上,一切正常。

最佳答案

从 QApplication 本身获取 cmd 行参数。

所以

QApplication app(argc, argv);

QStringList args = app.arguments();

for(...)

Qt 将正确处理编码。但这只会解决 cmd 行上 unicode 的问题。不过不确定这是否是您的主要问题。

编辑:fromLocal8Bit() 可能不起作用,因为它不是本地编码,而是 utf8。所以 fromUtf8() 可以在 linux 和 osx 上运行(但不能在 windows 上运行)。在 *nuxes 上,它取决于一些环境变量(LS_LANG 或其他)。我想 Qt 会考虑所有因素并正确转换它。如果您想确切了解它们的作用,可以查看 QApplication 的构造函数代码。

关于qt - QDir 和 QDirIterator 忽略具有非 ASCII 文件名的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1641994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com