c ++用非拉丁文名称打开文件

我有这样的文件。 我只是想正确打开非拉丁文名称的文件。
我只有非拉丁文名称的拉丁文名称的文件没有问题。

在这里输入图像描述

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

但打开文件存在瓶颈。
它得到这样我不想使用QFile,我只能使用C + +stream(更优选)或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。

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

提前感谢您的任何提示。

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

使用source.toLocal8Bit().data()source.toUtf8().data()可能会做你想做的事情,但是如果失败了,你将需要处理QTextCodecs来获得正确的8位编码。