Qt的QDir:文件名删除非Ascii字符

时间:2016-02-12 22:54:46

标签: qt unicode qfile qdir qfileinfo

我遇到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根本不能处理这个?谢谢!

1 个答案:

答案 0 :(得分:0)

Qt可以处理带有特殊字符的文件名。你只是让它们在字符串转换的东西中消失。 (完全没必要)试试这个:

#include <QDebug>
//...
QFileInfoList fileInfoList = someDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files);
foreach(QFileInfo fileInfo, fileInfoList)
{
    qDebug() << fileInfo.fileName();//uses qdebug
    std::cout << fileInfo.fileName().toStdWString() << std::endl;//uses a 16Bit string on normal cout
}

如果您仍然没有看到它们,那是因为您的控制台设置不允许显示它们。尝试将它们写入文件或在gui中显示它们 - 或者只是尝试打开具有该名称的文件,它将起作用。