我遇到了 QDir 从我的文件名中丢失非 Ascii 字符的问题。
我的文件名称如 testingöäüß.txt 或 exampleΦ.shp,当尝试使用 QDir 和 QFile 等 Qt 实用程序时,它们只是显示为 testing.txt 和 example.shp。好像我无法告诉这些类使用哪种编码。我正在尝试 QDirIterator 和 QDir 函数 entryInfoList:
QDir someDir("/home/blah"); //contains testingöäüß.txt
QDirIterator dirIter(someDir.absolutePath(), QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files);
while(dirIter.hasNext())
{
QString fileName1 = QFile::decodeName(dirIter.next().toUtf8());
std::cout << "QDirIterator Name " << fileName1.toStdString().c_str() << std::endl;
}
QFileInfoList fileInfoList = someDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files);
foreach(QFileInfo fileInfo, fileInfoList)
{
QString fileName1 = QFile::decodeName(fileInfo.fileName().toUtf8());
std::cout << "entryInfoList Name " << fileName1.toStdString().c_str() << std::endl;
QString fileName2 = QFile::decodeName(fileInfo.absoluteFilePath().toUtf8());
std::cout << "entryInfoList Name2 " << fileName2.toStdString().c_str() << std::endl;
QString fileName3 = QString::fromUtf8(dirIter.fileInfo().absoluteFilePath().toStdString().c_str());
std::cout << "entryInfoList Name3 " << fileName3.toStdString().c_str() << std::endl;
}
这些印刷品中的每一张都将缺少非 ascii 字符。似乎一旦您尝试获取要循环的文件名,它们将仅是 ascii。有人对此有任何想法吗?或者 Qt 不能处理这个?谢谢!