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

时间:2012-12-12 00:27:25

标签: c++ linux qt stl fstream

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

enter image description here

我使用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可以跳过这个问题。

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

提前感谢任何提示。

1 个答案:

答案 0 :(得分:3)

当您在QString上调用toStdString()时出现问题。它将基于QTextCodec::codecForCStrings()转换内容(如果已设置),否则将使用latin-1。 Latin-1会将你的非拉丁字符折叠为'?'。

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