首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QUrl,正确的路径编码

QUrl,正确的路径编码
EN

Stack Overflow用户
提问于 2014-07-03 15:48:18
回答 1查看 3.1K关注 0票数 1

我对编码有问题。我在我的应用程序中使用拖放和drom,但是有些文本文件我无法打开,经过一些搜索后,我发现路径编码错误。真正的文件是'Some_file - 01.txt‘,但是当我尝试将这个路径打印到标准输出时,我将得到'Some_file - 01.txt’。我想念的是:

代码语言:javascript
复制
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。

编辑:

这是我的主要设置:

代码语言:javascript
复制
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

不幸的是,就连这件事也不适合我:

代码语言:javascript
复制
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使用了不同的字符。“-”。

我能做什么?

解决方案:

代码语言:javascript
复制
void openFile(string fileName) {
  ifstream fileio(fileName.c_str());
}

QString qtFileName = QFileDialog::getOpenFileName(...)
openFile(qtFileName.toLocal8Bit().constData());
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-03 23:22:30

std::cout是用一些本地编码编码的。您需要的是将由QString返回的toLocalFile()转换为本地8位编码。

例如:

代码语言:javascript
复制
QUrl url = ...;
QString filePath = url.toLocalFile();
QByteArray filePath8 = filePath.toLocal8Bit();
std::cout << filePath8.constData();

但实际上,整个练习是不必要的,因为要访问应该使用的文件,您应该使用QFile (直接使用QString ),控制台输出可以使用QTextStream完成。即:

代码语言:javascript
复制
#include <cstdio>
#include <QTextStream>
#include <QFile>
QTextStream out(stdout);

void test() {
  out << filePath;

  QFile file(filePath);
  if (file.open(QIODevice::ReadOnly)) {
    ...
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24558212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档