我的编码有问题。我在我的应用程序中使用拖动和 drom,但有些文本文件无法打开,经过一番搜索后,我发现路径的编码错误。真正的文件是“Some_file - 01.txt”,但是当我尝试将此路径(放置后)打印到标准输出时,我会得到“Some_file - 01.txt”。我想念的:
void MainWindow::dropEvent(QDropEvent *event) {
QList<QUrl> urls = event->mimeData()->urls();
...
cout << paths[1].toLocalFile() << endl; /* Some_file – 01.txt */
cout << paths[1].toEncoded() << endl; /* Some_file%20%E2%80%93%2001.txt */
}
我也尝试 QString::fromLatin1 或 fromUtf8 但没有成功。我正在使用 QT 4.7.0 和 Windows 7。
编辑:
这是我的主要设置:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
不幸的是,即使这对我也不起作用:
QString fileName = QFileDialog::getOpenFileName(this, tr("Load EEPROM from HEX file"), "", tr("HEX file (*.hex)"));
ifstream hexFile(fileName.toStdString().c_str());
我无法打开 char '-' 是文件名一部分的文件。
编辑2:
如果我手动将文件名从“file.txt”更改为“file-.txt”,一切正常。但是当我(同一个文件)将此文件复制并粘贴到同一个文件夹时,Windows 将生成带有后缀的新名称:'file - copy.txt',并且这个文件我无法打开。所以 Windows 使用不同的字符来表示 '-' vz。'——'。
我可以做什么 ?
解决方案:
void openFile(string fileName) {
ifstream fileio(fileName.c_str());
}
QString qtFileName = QFileDialog::getOpenFileName(...)
openFile(qtFileName.toLocal8Bit().constData());