2

我有这样的文件。我只想正确打开非拉丁名称的文件。
对于仅具有非拉丁名称的拉丁名称的文件,我没有任何问题。

在此处输入图像描述

我使用 QDir 扫描目录,并在 QString 中保存名称,所以它在里面保存得很好。

但是打开文件存在瓶颈。
它让我不想使用 QFile,我只能使用 C++ 流(更优选)或 C 文件。

当我想打开文件时,我这样做:

fstream stream(source.toStdString().c_str(),ios_base::in | ios_base::binary);

之后我检查尝试是否成功:

  if(!stream.is_open())
   { cout<<"file wasn't opened " <<source.toStdString().c_str())<<"\n";
     return false; // cout was redirected to file // just a notice
   }

我进入我的日志文件:
文件未打开 /home/sh/.mozilla/firefox/004_??????? - ???? - ?????.mp3

它不适用于任何具有非拉丁名称的文件,并且它适用于每个具有拉丁名称的文件。

我知道可以使用 QFile 跳过这个问题。

但我想知道,是否有可能在没有第三方库的情况下完成它,或者是否有其他方法可以解决它?

提前感谢您的任何提示。

4

1 回答 1

3

toStdString()当你调用你的 QString时,事情就出错了。QTextCodec::codecForCStrings()如果已设置,它将基于 , 转换内容,否则将使用 latin-1。Latin-1 会将您的非拉丁字符折叠为“?”。

使用source.toLocal8Bit().data()orsource.toUtf8().data()代替可能会做你想做的事,但如果做不到,你需要处理 QTextCodecs 以获得正确的 8 位编码。

于 2012-12-12T00:45:54.843 回答