我有这样的文件。我只想正确打开非拉丁文名称的文件 对于只有非拉丁名字的拉丁文名称的文件我没有问题。
我使用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可以跳过这个问题。
但是我想知道,是否有可能在没有第三方库的情况下完成它,还是有其他方法可以解决它?
提前感谢任何提示。
答案 0 :(得分:3)
当您在QString上调用toStdString()
时出现问题。它将基于QTextCodec::codecForCStrings()
转换内容(如果已设置),否则将使用latin-1。 Latin-1会将你的非拉丁字符折叠为'?'。
使用source.toLocal8Bit().data()
或source.toUtf8().data()
代替您可能会做您想要的,但如果不这样做,您将需要处理QTextCodecs以获得正确的8位编码。