我有这样的文件。 我只是想正确打开非拉丁文名称的文件。
我只有非拉丁文名称的拉丁文名称的文件没有问题。
我使用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位编码。