我对编码有问题。我在我的应用程序中使用拖放和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 1或fromUtf8,但没有成功。我使用的是QT4.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 '-‘是文件名一部分的文件。
EDIT2:
如果我将文件名手动地从“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());发布于 2014-07-03 23:22:30
std::cout是用一些本地编码编码的。您需要的是将由QString返回的toLocalFile()转换为本地8位编码。
例如:
QUrl url = ...;
QString filePath = url.toLocalFile();
QByteArray filePath8 = filePath.toLocal8Bit();
std::cout << filePath8.constData();但实际上,整个练习是不必要的,因为要访问应该使用的文件,您应该使用QFile (直接使用QString ),控制台输出可以使用QTextStream完成。即:
#include <cstdio>
#include <QTextStream>
#include <QFile>
QTextStream out(stdout);
void test() {
out << filePath;
QFile file(filePath);
if (file.open(QIODevice::ReadOnly)) {
...
}
}https://stackoverflow.com/questions/24558212
复制相似问题